В классе Rectangle с атрибутами a и b, которые являются сторонами прямоугольника, я реализовал метод `calculate_area`, который вычисляет площадь прямоугольника по формуле S a * b.python
class Rectangle⁚
def __init__(self, a, b)⁚
self.a a
self.b b
def calculate_area(self)⁚
return self.a * self.b
В классе-наследнике от Rectangle, Square, я реализовал метод `__init__`, в котором принимается только один параметр – сторона. Я использовал функцию `super`, чтобы вызвать конструктор родительского класса и передать в него значение стороны для обоих атрибутов a и b.python
class Square(Rectangle)⁚
def __init__(self, side)⁚
super.__init__(side, side)
В классе-примеси CalculatePerimeterMixin, я наследовался от класса Rectangle и реализовал метод `calculate_perimeter`, который вычисляет периметр прямоугольника по формуле P 2 * (a b).python
class CalculatePerimeterMixin(Rectangle)⁚
def calculate_perimeter(self)⁚
return 2 * (self.a self.b)
В классе наследнике SquareWithMixin от двух классов (CalculatePerimeterMixin и Square), я реализовал 3 магических метода⁚ `__str__`, `__repr__` и `__eq__`. Методы `__str__` и `__repr__` возвращают строковое представление объекта, а метод `__eq__` проверяет равенство двух объектов.python
class SquareWithMixin(CalculatePerimeterMixin, Square)⁚
def __str__(self)⁚
return f″Square with side {self.a}″
def __repr__(self)⁚
return f″Square({self.a})″
def __eq__(self, other)⁚
return self.a other.a and self.b other.b
После реализации всех классов и их методов, можно создавать объекты и использовать их⁚
python
# Создаем объекты
rectangle Rectangle(4, 5)
square Square(4)
square_with_mixin SquareWithMixin(4)
# Вычисляем площадь прямоугольника
area rectangle.calculate_area
print(f″Площадь прямоугольника⁚ {area}″) # Результат⁚ Площадь прямоугольника⁚ 20
# Вычисляем периметр прямоугольника
perimeter square_with_mixin.calculate_perimeter
print(f″Периметр прямоугольника⁚ {perimeter}″) # Результат⁚ Периметр прямоугольника⁚ 16
# Проверяем равенство объектов
print(square_with_mixin square) # Результат⁚ True
print(square_with_mixin rectangle) # Результат⁚ False
print(str(square_with_mixin)) # Результат⁚ Square with side 4
print(repr(square_with_mixin)) # Результат⁚ Square(4)
Это был мой личный опыт реализации классов и их методов в Python для работы с прямоугольниками и квадратами. Благодаря наследованию и использованию примеси, я смог упростить код и повторно использовать функциональность других классов. Это позволяет написать более чистый и эффективный код.