TelenkovDmitry il y a 8 mois
Parent
commit
ba5d6d1c77

+ 58 - 3
courses/python_oop/dunder_method/dunder_task_2.py

@@ -6,6 +6,7 @@
 # __gt__ >
 # __ge__ >=
 
+from functools import total_ordering
 
 class Rectangle:
 
@@ -33,14 +34,68 @@ class Rectangle:
 
 class Point:
     
-    def __init__(self) -> None:
-        pass
+    def __init__(self, x, y) -> None:
+        self.x = x
+        self.y = y
+
+    def __eq__(self, other: object) -> bool:
+        return isinstance(other, Point) and \
+            self.x == other.x and self.y == other.y
         
+    def __hash__(self):
+        return hash((self.x, self.y))
+
+
+@total_ordering
+class Fruit:
+
+    def __init__(self, name, price):
+        self.name = name
+        self.price = price
 
+    def __eq__(self, value: object) -> bool:
+        if isinstance(value, (int, float)):
+            return self.price == value
+        elif isinstance(value, Fruit):
+            return self.price == value.price
+        else:
+            raise ValueError
+
+    def __lt__(self, value):
+        if isinstance(value, (int, float)):
+            return self.price < value
+        elif isinstance(value, Fruit):
+            return self.price < value.price
+        else:
+            raise ValueError
 
 def main():
-    pass
+    apple = Fruit("Apple", 0.5)
+    orange = Fruit("Orange", 1)
+    banana = Fruit("Banana", 1.6)
+    lime = Fruit("Lime", 1.0)
+
+    assert (banana > 1.2) is True
+    assert (banana >= 1.2) is True
+    assert (banana == 1.2) is False
+    assert (banana != 1.2) is True
+    assert (banana < 1.2) is False
+    assert (banana <= 1.2) is False
+
+    assert (apple > orange) is False
+    assert (apple >= orange) is False
+    assert (apple == orange) is False
+    assert (apple != orange) is True
+    assert (apple < orange) is True
+    assert (apple <= orange) is True
 
+    assert (orange == lime) is True
+    assert (orange != lime) is False
+    assert (orange > lime) is False
+    assert (orange < lime) is False
+    assert (orange <= lime) is True
+    assert (orange >= lime) is True
+    print('Good')
 
 if __name__ == '__main__':
     main()

+ 48 - 0
courses/python_oop/dunder_method/poly.py

@@ -0,0 +1,48 @@
+# Полиморфизм
+
+# Проблема 
+
+class Rectangle:
+    def __init__(self, a, b):
+        self.a = a
+        self.b = b
+
+    def get_area(self):
+        return self.a * self.b
+    
+
+class Square:
+
+    def __init__(self, a) -> None:
+        self.a = a
+
+    def get_area(self):
+        return self.a**2
+
+
+class Circle:
+
+    def __init__(self, r):
+        self.r = r
+
+    def get_area(self):
+        return 3.14*self.r**2
+        
+
+
+
+def main():
+    rect1 = Rectangle(3, 4)
+    rect2 = Rectangle(12, 5)
+
+    sq1 = Square(4)
+    sq2 = Square(5)
+
+    figures = [rect1, rect2, sq1, sq2]
+    for figure in figures:
+        print(figure.get_area())
+
+
+
+if __name__ == '__main__':
+    main()