class KarginHaxordum:
= "Ֆանտաստիկ"
vorak
def __init__(self, hamar, derasanner, text):
if hamar < 1:
print("պետքա բնական թիվ լինի")
self.hamar = hamar
self.derasanner = derasanner
self.text = text
def nkarel(self, vorak=None, derasanner=None, text=None): # կլասսի միջի ֆունկցիային անվանում ենք մեթոդ
if vorak is None:
= self.vorak
vorak if derasanner is None:
= self.derasanner
derasanner if text is None:
= self.text
text
print(f"Որակը՝ {vorak}")
print(f"Կանչել {' '.join(derasanner)}")
print(f"Խնրդել որ ասեն -> {text}")
15 OOP 2: Inheritance, Polymorphism
լուսանկարի հղումը, Հեղինակ՝ Alexander starcew
Song reference - ToDo
🎦 Տեսադասեր + լրացուցիչ (ToDo)
ToDo 1. Տեսություն 2025
2. Տեսություն 2023 (ToDo)
3. Գործնական 2025
4. Գործնական 2023 (ToDo)
5. Որոշ տնայինների լուծումներ (ToDo)
Google Forms ToDo
📚 Նյութը
Հավելյալ նյութեր
Inheritance (Ժառանգականություն)
Կարգին հաղորդում ունեինք, եկեք փորձենք կարգին սկետչ շոուի կլասը սարքել
class KarginSketchShow:
= "դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը"
vorak
def __init__(self, hamar, derasanner, text):
if hamar < 1:
print("պետքա բնական թիվ լինի")
self.hamar = hamar
self.derasanner = derasanner
self.text = text
def nkarel(self, vorak=None, derasanner=None, text=None): # կլասսի միջի ֆունկցիային անվանում ենք մեթոդ
if vorak is None:
= self.vorak
vorak if derasanner is None:
= self.derasanner
derasanner if text is None:
= self.text
text
print(f"Որակը՝ {vorak}")
print(f"Կանչել {' '.join(derasanner)}")
print(f"Խնրդել որ ասեն -> {text}")
Կրկնվող կոդ -> օգտագործում ենք բութ մատի օրենքը -> կարանք ավելի լավ անենք
մի քիչ հեշտ դեպքից սկսենք
class KarginHaxordum:
= "Հայաստան"
erkir = "ֆանտաստիկ"
vorak
def glux_goval(self):
print(f"Մեր որակը` {self.vorak}")
= KarginHaxordum()
h
print(h.erkir)
print(h.vorak)
h.glux_goval()
Հայաստան
ֆանտաստիկ
Մեր որակը` ֆանտաստիկ
class KarginHaxordum:
= "Հայաստան"
erkir = "ֆանտաստիկ"
vorak
def glux_goval(self):
print(f"Մեր որակը՝ {self.vorak}")
class KarginSketchShow:
= "Հայաստան"
erkir = "դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը"
vorak
def glux_goval(self):
print(f"Մեր որակը` {self.vorak}")
վերևինի փոխարեն կարանք գրենք՝
class KarginSketchShow(KarginHaxordum):
= "դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը"
vorak
= 500 budget
= KarginSketchShow()
s
print(s.vorak)
print(s.erkir)
դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը
Հայաստան
print(s.erkir)
Հայաստան
print(s.budget)
500
print(s.glux_goval())
Մեր որակը` դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը
None
Method overwrite
class KarginSketchShow(KarginHaxordum):
= "դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը"
vorak
def glux_goval(self):
print("մենք համեստ ենք, գլուխ չենք գովա")
= KarginSketchShow()
s
print(s.vorak)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Input In [23], in <cell line: 1>() ----> 1 s = KarginSketchShow() 3 print(s.vorak) TypeError: KarginHaxordum.__init__() missing 3 required positional arguments: 'hamar', 'derasanner', and 'text'
print(s.erkir)
Հայաստան
s.glux_goval()
մենք համեստ ենք, գլուխ չենք գովա
init-ի նրբությունները
class KarginHaxordum:
= "Հայաստան"
erkir = "Ֆանտաստիկ"
vorak
def __init__(self, hamar, derasanner, text):
if hamar < 1:
print("պետքա բնական թիվ լինի")
self.hamar = hamar
self.derasanner = derasanner
self.text = text
def nkarel(self, vorak=None, derasanner=None, text=None):
if vorak is None:
= self.vorak
vorak if derasanner is None:
= self.derasanner
derasanner if text is None:
= self.text
text
print(f"Որակը՝ {vorak}")
print(f"Կանչել {' '.join(derasanner)}")
print(f"Խնրդել որ ասեն -> {text}")
class KarginSketchShow(KarginHaxordum):
= "դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը"
vorak
def glux_goval(self):
print("մենք համեստ ենք, գլուխ չենք գովա")
= KarginSketchShow() s
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Input In [31], in <cell line: 1>() ----> 1 s = KarginSketchShow() TypeError: KarginHaxordum.__init__() missing 3 required positional arguments: 'hamar', 'derasanner', and 'text'
= KarginSketchShow(509, ["Մկո", "Մավսես"], "պանիր") s
s.hamar
509
s.glux_goval()
մենք համեստ ենք, գլուխ չենք գովա
Իսկ ինչ եթե ուզում ենք ինչ-որ պարամետրներ էլ ներառենք
class KarginSketchShow(KarginHaxordum):
= "դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը"
vorak
def __init__(self, mtqi_hexinak):
self.mtqi_hexinak = mtqi_hexinak
def glux_goval(self):
print("մենք համեստ ենք, գլուխ չենք գովա")
= KarginSketchShow("Ռաֆո") s
s.mtqi_hexinak
'Ռաֆո'
s.nkarel()
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Input In [38], in <cell line: 1>() ----> 1 s.nkarel() Input In [29], in KarginHaxordum.nkarel(self, vorak, derasanner, text) 14 vorak = self.vorak 15 if derasanner is None: ---> 16 derasanner = self.derasanner 17 if text is None: 18 text = self.text AttributeError: 'KarginSketchShow' object has no attribute 'derasanner'
= KarginSketchShow("Ռաֆո")
s print(s.mtqi_hexinak)
print(s.hamar)
Ռաֆո
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-147-6714aad4807c> in <cell line: 3>() 1 s = KarginSketchShow("Ռաֆո") 2 print(s.mtqi_hexinak) ----> 3 print(s.hamar) AttributeError: 'KarginSketchShow' object has no attribute 'hamar'
class KarginSketchShow(KarginHaxordum):
= "դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը"
vorak
def __init__(self, hamar, derasanner, text, mtqi_hexinak):
self.mtqi_hexinak = mtqi_hexinak
if hamar < 1:
print("պետքա բնական թիվ լինի")
self.hamar = hamar
self.derasanner = derasanner
self.text = text
def glux_goval(self):
print("մենք համեստ ենք, գլուխ չենք գովա")
= KarginSketchShow(509, ["Մկո", "Մավսես"], "պանիր", "Ռաֆո")
s print(s.mtqi_hexinak)
print(s.derasanner)
Ռաֆո
['Մկո', 'Մավսես']
class KarginSketchShow(KarginHaxordum):
= "դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը"
vorak
def __init__(self, hamar, derasanner, text, mtqi_hexinak):
# KarginHaxordum.__init__(self, hamar, derasanner, text)
super().__init__(hamar, derasanner, text)
self.mtqi_hexinak = mtqi_hexinak
def glux_goval(self):
print("մենք համեստ ենք, գլուխ չենք գովա")
= KarginSketchShow(509, ["Մկո", "Մավսես"], "պանիր", "Ռաֆո")
s print(s.mtqi_hexinak)
print(s.hamar)
print(s.nkarel())
Ռաֆո
509
Որակը՝ դե կարգին հաղորդում չի իհարկե, բայց դե փորձեցին ժողովուրդը
Կանչել Մկո Մավսես
Խնրդել որ ասեն -> պանիր
None
Exceptionների օրինակ
raise ValueError("problem")
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) Input In [44], in <cell line: 1>() ----> 1 raise ValueError("problem") ValueError: problem
class MerSepakanException(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
= input("Դուք սիրու՞մ եք կարգին հաղորդում: ")
ser if ser != "շատ":
raise MerSepakanException(f"վայ-վայ-վայ, քոռանայի չլսեի")
--------------------------------------------------------------------------- MerSepakanException Traceback (most recent call last) Input In [45], in <cell line: 7>() 6 ser = input("Դուք սիրու՞մ եք կարգին հաղորդում: ") 7 if ser != "շատ": ----> 8 raise MerSepakanException(f"վայ-վայ-վայ, քոռանայի չլսեի") MerSepakanException: վայ-վայ-վայ, քոռանայի չլսեի
isinstance, issubclass
type(4) == int
True
class Animal:
pass
class Shun(Animal):
pass
= Shun()
tuzik
print(isinstance(tuzik, int))
print(isinstance(tuzik, Shun))
print(isinstance(tuzik, Animal))
False
True
True
class Animal:
pass
class Shun(Animal):
pass
print(issubclass(Shun, int))
print(issubclass(Shun, Animal))
print(issubclass(Animal, Shun))
False
True
False
Method resolution order (MRO)
class A1:
def foo(self):
print("A1.foo")
class A2:
def foo(self):
print("A2.foo")
class B1(A1): # B1, A1, object
= "b1"
name pass
# def foo(self):
# print("B1.foo")
class B2(A2): # B2, A2, object
= "b2"
name def foo(self):
print("B2.foo")
class C(B1, B2):
pass
# A1 | A2
# B1 | B2
# C
= C()
c
c.foo() print(C.mro())
print(c.name)
A1.foo
[<class '__main__.C'>, <class '__main__.B1'>, <class '__main__.A1'>, <class '__main__.B2'>, <class '__main__.A2'>, <class 'object'>]
b1
Միշտ չի որ կաշխատի՝
class A:
pass
class B(A):
pass
class C(A):
pass
class X(B, C):
pass
class Y(C, B):
pass
class Z(X, Y):
pass
= Z()
z z.mro()
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Input In [60], in <cell line: 16>() 13 class Y(C, B): 14 pass ---> 16 class Z(X, Y): 17 pass 19 z = Z() TypeError: Cannot create a consistent method resolution order (MRO) for bases B, C
The key thing is that Python’s C3‐linearization must respect the local precedence order declared in each class. In class B2(A1, A2) you’ve said “A1 comes before A2,” so no MRO for any subclass of B2 may ever put A2 before A1.
Composition vs Inheritance
In object‐oriented design, composition over inheritance is the principle that you should prefer to build complex behavior by combining (“composing”) simple objects, rather than by creating deep class hierarchies through inheritance.
- Composition Over Inheritance Explained, 5 minute video
- CodeAestetics The Flaws of Inheritance, 10 minute video
- ArjanCodes, 23 minute video
- Real Python - Composition vs Inheritance
class Bird:
def fly(self):
print("Flapping wings")
class Duck(Bird):
pass
class Ostrich(Bird):
# Ostriches can't fly, but still inherit fly()
def fly(self):
raise NotImplementedError("Ostrich can't fly!")
Here, Ostrich
must override fly()
just to prevent inherited behavior that doesn’t apply. As more behaviors accumulate (swimming, singing, nesting…), you could end up with a combinatorial explosion of subclasses.
Composition approach
class FlyingBehavior:
def fly(self):
print("Flapping wings")
class NoFlyBehavior:
def fly(self):
raise NotImplementedError("Cannot fly!")
class Bird:
def __init__(self, fly_behavior):
self._fly_behavior = fly_behavior
def fly(self):
return self._fly_behavior.fly()
class Duck(Bird):
def __init__(self):
super().__init__(FlyingBehavior())
class Ostrich(Bird):
def __init__(self):
super().__init__(NoFlyBehavior())
= Duck()
duck
duck.fly()# → “Flapping wings”
Flapping wings
= Ostrich()
ostrich ostrich.fly()
--------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) Input In [65], in <cell line: 2>() 1 ostrich = Ostrich() ----> 2 ostrich.fly() Input In [63], in Bird.fly(self) 5 def fly(self): ----> 6 return self._fly_behavior.fly() Input In [62], in NoFlyBehavior.fly(self) 6 def fly(self): ----> 7 raise NotImplementedError("Cannot fly!") NotImplementedError: Cannot fly!
Polymorphism
# +
print("1" + "1")
print(1 + 1)
# __add__()
# int + int
# print(KarginHaxordum + )
# +, in, len, [0]
11
2
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_rect_area(self):
return self.width * self.height
class Circle:
def __init__(self, radius):
self.radius = radius
def calculate_circle_area(self):
return 3.141592 * self.radius ** 2
= Rectangle(34, 10)
rect1 = Rectangle(14, 509)
rect2 = Circle(3)
circle1 = Circle(5)
circle2
print(rect1.calculate_rect_area())
print(rect2.calculate_rect_area())
print(circle1.calculate_circle_area())
print(circle2.calculate_circle_area())
340
7126
28.274328
78.5398
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_rect_area(self):
return self.width * self.height
class Circle:
def __init__(self, radius):
self.radius = radius
def calculate_circle_area(self):
return 3.141592 * self.radius * self.radius
= Rectangle(34, 10)
rect1 = Rectangle(11, 509)
rect2 = Circle(3)
circle1 = Circle(5)
circle2
for r in [rect1, rect2]:
print(r.calculate_rect_area())
for c in [circle1, circle2]:
print(c.calculate_circle_area())
340
5599
28.274328000000004
78.5398
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_area(self):
return self.width * self.height
class Circle:
def __init__(self, radius):
self.radius = radius
def calculate_area(self):
return 3.141592 * self.radius * self.radius
= Rectangle(34, 10)
rect1 = Rectangle(11, 509)
rect2 = Circle(3)
circle1 = Circle(5)
circle2
for shape in [rect1, rect2, circle1, circle2]:
print(shape.calculate_area())
340
5599
28.274328000000004
78.5398
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def calculate_area(self):
return self.width * self.height
class Circle:
def __init__(self, radius):
self.radius = radius
def calculate_area(self):
return 3.141592 * self.radius * self.radius
= Rectangle(34, 10)
rect1 = Rectangle(11, 509)
rect2 = Circle(3)
circle1 = Circle(5)
circle2
def area(shape):
return shape.calculate_area()
print(area(rect1))
print(area(circle2))
340
78.5398
class Armenian:
def barevel(self):
return "Բարև"
class SpyurqaArmenian:
def barevel(self):
return "Փարևև, բաբամ"
= Armenian()
a = SpyurqaArmenian()
s
def barev(mard):
return mard.barevel()
barev(a), barev(s)
('Բարև', 'Փարևև, բաբամ')
Magic methods
import os
import json
= os.path.join("assets", "imdb_top_999.json")
PATH
with open(PATH, "r") as f:
= json.load(f)
data
= ['Meta_score', "No_of_Votes", "Overview"]
KEYS_TO_DELETE
for i in data.keys():
for k in KEYS_TO_DELETE:
del data[i][k]
for i in data.keys():
"Name"] = i data[i][
"The Shawshank Redemption"] data[
{'Released_Year': '1994',
'Runtime': '142 min',
'Genre': 'Drama',
'IMDB_Rating': 9.3,
'Director': 'Frank Darabont',
'Star1': 'Tim Robbins',
'Star2': 'Morgan Freeman',
'Star3': 'Bob Gunton',
'Star4': 'William Sadler',
'Gross': '28,341,469',
'Name': 'The Shawshank Redemption'}
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def get_actors(self):
self.star_string = ", ".join([self.star1, self.star2, self.star3, self.star4])
return self.star_string
def get_info(self):
self.info = f"Was released in {self.release_year} by {self.director}"
return self.info
= Kino(**data["The King's Speech"])
k1
print(k1.get_actors())
print(k1.get_info())
print(k1)
Colin Firth, Geoffrey Rush, Helena Bonham Carter, Derek Jacobi
Was released in 2010 by Tom Hooper
<__main__.Kino object at 0x0000016F14FE21D0>
Category | Key Methods | What They Enable |
---|---|---|
Representation | __str__ , __repr__ |
print(obj) , helpful print |
Size & Truthiness | __len__ , __bool__ |
len(obj) , if obj: |
Iteration & Container Access | __iter__ , __next__ , __getitem__ |
for x in obj , obj[i] |
Arithmetic / Operators | __add__ , __sub__ , __mul__ , … |
obj1 + obj2 , obj * 3 |
Comparison | __eq__ , __lt__ , … |
obj1 == obj2 , sorting |
Context Management | __enter__ , __exit__ |
with obj: blocks |
# __init__()
# __str__()
= Kino(**data["Forrest Gump"])
movie print(movie)
<__main__.Kino object at 0x0000016F14F565F0>
Representation (repr, str)
str
print([2, 3])
[2, 3]
print(movie)
<__main__.Kino object at 0x7a6dd30b8f90>
= str(movie)
a print(movie.__str__())
print(a)
# 1 + 1
# 1.__add__(1)
<__main__.Kino object at 0x0000016F14F565F0>
<__main__.Kino object at 0x0000016F14F565F0>
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __str__(self):
return f"{self.name} by {self.director}, released in {self.release_year}"
def get_actors(self):
self.star_string = ", ".join([self.star1, self.star2, self.star3, self.star4])
return self.star_string
def get_info(self):
self.info = f"Was released in {self.release_year} by {self.director}"
return self.info
= Kino(**data["Forrest Gump"]) movie
print(movie)
print(movie.__str__())
print(str(movie))
Forrest Gump by Robert Zemeckis, released in 1994
Forrest Gump by Robert Zemeckis, released in 1994
Forrest Gump by Robert Zemeckis, released in 1994
= repr(movie)
a print(a)
<__main__.Kino object at 0x0000016F1616CE50>
repr
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __str__(self):
return f"{self.name} by {self.director}, released in {self.release_year}"
# movie = Kino(**data["Forrest Gump"])
def __repr__(self):
return f"to create run Kino(**data['{self.name}']))"
def get_actors(self):
self.star_string = ", ".join([self.star1, self.star2, self.star3, self.star4])
return self.star_string
def get_info(self):
self.info = f"Was released in {self.release_year} by {self.director}"
return self.info
= Kino(**data["Forrest Gump"]) movie
print(movie) # str եթե կա, եթե չէ repr
to create run Kino(**data['Forrest Gump']))
repr(movie)
"to create run Kino(**data['Forrest Gump']))"
Arithmetic / Operators (eq, ne, lt, le, gt, ge)
eq
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __str__(self):
return f"{self.name} by {self.director}, released in {self.release_year}"
def __repr__(self):
return f"to create run Kino(**data['{self.name}']))"
def get_actors(self):
self.star_string = ", ".join([self.star1, self.star2, self.star3, self.star4])
return self.star_string
def get_info(self):
self.info = f"Was released in {self.release_year} by {self.director}"
return self.info
= Kino(**data["Forrest Gump"])
movie1 = Kino(**data['The Shawshank Redemption']) movie2
== movie2 movie1
False
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __eq__(self, other): # equal
return self.director == other.director
= Kino(**data['The Godfather'])
movie1 = Kino(**data["The Godfather: Part II"])
movie2 = Kino(**data['The Shawshank Redemption']) movie3
# data['The Godfather']
movie2.director
'Francis Ford Coppola'
print(movie1 == movie2) # -> movie1.__eq__(movie2)
print(movie1 == movie3)
True
False
print(movie2 != movie3)
True
not equal
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __eq__(self, other):
return self.director == other.director
def __ne__(self, other): # not equal
return not self.__eq__(other)
= Kino(**data['The Godfather'])
movie1 = Kino(**data["The Godfather: Part II"])
movie2 = Kino(**data['The Shawshank Redemption']) movie3
print(movie1 != movie2)
False
print(movie2 != movie3)
True
less than, less than or equal, greater than, greater than or equal
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __lt__(self, other): # less than
return self.rating < other.rating
= Kino(**data['The Godfather'])
movie1 = Kino(**data["The Godfather: Part II"])
movie2 = Kino(**data['The Shawshank Redemption']) movie3
print(movie1 < movie2)
False
print(movie1 <= movie2)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Input In [103], in <cell line: 1>() ----> 1 print(movie1 <= movie2) TypeError: '<=' not supported between instances of 'Kino' and 'Kino'
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __lt__(self, other):
return self.rating < other.rating
def __le__(self, other): # less or equal
return self.rating <= other.rating
= Kino(**data['The Godfather'])
movie1 = Kino(**data["The Godfather: Part II"])
movie2 = Kino(**data['The Shawshank Redemption']) movie3
print(movie2 <= movie3)
True
greater than ու greater than or equalը նման ձևով
add, sub, mul, truediv, floordiv, mod, pow
+ movie2 # **, +, -, *, // movie1
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-59-205a91fb7f6d> in <cell line: 1>() ----> 1 movie1 + movie2 TypeError: unsupported operand type(s) for +: 'Kino' and 'Kino'
__add__(movie2) movie1.
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-60-d2e93785a7d5> in <cell line: 1>() ----> 1 movie1.__add__(movie2) AttributeError: 'Kino' object has no attribute '__add__'
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __add__(self, other):
print(f"adding {self.name} and {other.name}")
return int(self.runtime.split()[0]) + int(other.runtime.split()[0])
# 132 minutes
= Kino(**data['The Godfather'])
movie1 = Kino(**data["The Godfather: Part II"])
movie2 = Kino(**data['The Shawshank Redemption']) movie3
+ movie2 movie1
adding The Godfather and The Godfather: Part II
377
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __truediv__(self, other): # /
return self.rating / other.rating
def __floordiv__(self, other): # / /
return "երկուսն էլ լավն են"
= Kino(**data['The Godfather'])
movie1 = Kino(**data["The Godfather: Part II"])
movie2 = Kino(**data['The Shawshank Redemption']) movie3
/ movie1 movie3
1.0108695652173914
// movie1 movie3
'երկուսն էլ լավն են'
length (len), bool (bool)
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def __len__(self):
= int(self.runtime.split()[0])
duration return duration // 60 + 1 # must be integer
= Kino(**data['The Godfather'])
movie1 = Kino(**data["The Godfather: Part II"])
movie2 = Kino(**data['The Shawshank Redemption']) movie3
len(movie1)
# if bool(movie1:
3
Indexes
getitem, setitem, delitem,
class Genre:
def __init__(self, name, description, kinoner=None):
self.name = name
self.description = description
self.kinoner = kinoner if kinoner else []
def number_of_films(self):
return len(self.kinoner)
def get_average_rating(self):
= 0
total for k in self.kinoner:
+= k.rating
total return total / self.number_of_films()
= [Kino(**data[i]) for i in data.keys()]
movies_list
= {}
movies_by_genre
for movie in movies_list:
for g in movie.genre.split(", "):
if g in movies_by_genre.keys():
movies_by_genre[g].append(movie)else:
= [movie] movies_by_genre[g]
= Genre(name="Drama", description="Լացելու կինոներ", kinoner=movies_by_genre['Drama']) drama
drama.get_average_rating()
7.959059474412212
0:4] drama.kinoner[
[<__main__.Kino at 0x16f14fe39d0>,
<__main__.Kino at 0x16f14fe2080>,
<__main__.Kino at 0x16f14fe1fc0>,
<__main__.Kino at 0x16f14fe2170>]
print(drama.kinoner[1])
<__main__.Kino object at 0x0000016F14FE2080>
demo
# drama[0]
# print([1,2,3][0])
print({1,2,3}[0])
<>:4: SyntaxWarning: 'set' object is not subscriptable; perhaps you missed a comma?
<>:4: SyntaxWarning: 'set' object is not subscriptable; perhaps you missed a comma?
C:\Users\hayk_\AppData\Local\Temp\ipykernel_15068\4075712312.py:4: SyntaxWarning: 'set' object is not subscriptable; perhaps you missed a comma?
print({1,2,3}[0])
C:\Users\hayk_\AppData\Local\Temp\ipykernel_15068\4075712312.py:4: SyntaxWarning: 'set' object is not subscriptable; perhaps you missed a comma?
print({1,2,3}[0])
C:\Users\hayk_\AppData\Local\Temp\ipykernel_15068\4075712312.py:4: SyntaxWarning: 'set' object is not subscriptable; perhaps you missed a comma?
print({1,2,3}[0])
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Input In [126], in <cell line: 4>() 1 # drama[0] 2 3 # print([1,2,3][0]) ----> 4 print({1,2,3}[0]) TypeError: 'set' object is not subscriptable
class Genre:
def __init__(self, name, description, kinoner=None):
self.name = name
self.description = description
self.kinoner = kinoner if kinoner else []
def get_average_rating(self):
= 0
total for k in self.kinoner:
+= k.rating
total return total / self.number_of_films()
def number_of_films(self):
return len(self.kinoner)
def __getitem__(self, index):
return self.kinoner[index]
def __setitem__(self, index, value):
self.kinoner[index] = value
def __delitem__(self, index):
del self.kinoner[index]
= Genre(name="Drama", description="Լացելու կինոներ", kinoner=movies_by_genre['Drama']) drama
0] # drama.__getitem__(0) drama[
<__main__.Kino at 0x16f14fe39d0>
0] = "կարգին հաղորդում" # drama.__setitem__(0, "կարգին հաղորդում") drama[
0] drama[
'կարգին հաղորդում'
5] drama.kinoner[:
['կարգին հաղորդում',
<__main__.Kino at 0x16f14fe2080>,
<__main__.Kino at 0x16f14fe1fc0>,
<__main__.Kino at 0x16f14fe2170>,
<__main__.Kino at 0x16f14fe1810>]
del drama[0]
4] drama[:
[<__main__.Kino at 0x16f14fe2080>,
<__main__.Kino at 0x16f14fe1fc0>,
<__main__.Kino at 0x16f14fe2170>,
<__main__.Kino at 0x16f14fe1810>]
contains
class Kino:
def __init__(self, Name, Released_Year, Runtime, Genre, IMDB_Rating, Director,
Star1, Star2, Star3, Star4, Gross):self.name = Name
self.release_year = Released_Year
self.runtime = Runtime
self.genre = Genre
self.rating = IMDB_Rating
self.director = Director
self.star1 = Star1
self.star2 = Star2
self.star3 = Star3
self.star4 = Star4
self.gross = Gross
def get_actors(self):
self.star_string = ", ".join([self.star1, self.star2, self.star3, self.star4])
return self.star_string
def __contains__(self, other) -> bool:
return self.star1 in other.get_actors()
= Kino(**data['The Godfather'])
movie1 = Kino(**data["The Godfather: Part II"])
movie2 = Kino(**data['The Shawshank Redemption']) movie3
in movie3
movie1
False
🏡Տնային
Պրոեկտում magic method—ներ ավելացնել
🎲 15
- ▶️Thomas Flight
- ▶️Video 🔥
- 🇦🇲🎶Քարահունջ
- 🌐🎶Damien Rice
- 🤌Կարգին