Python перегрузка операторов
Создайте класс Circle (окружность). Для данного класса реализуйте ряд перегруженных операторов: ■ Проверка на равенство радиусов двух окружностей (операция = =); ■ Сравнения длин двух окружностей (операции >, <=,>=); ■ Пропорциональное изменение размеров окружности, путем изменения ее радиуса (операции + - += -=).
Моя попытка, но я больше не знаю что можно сделать, не могли бы вы подсказать
class Circle:
def __init__(self, radius: int, lenght: float):
self.radius = radius
self.lenght = lenght
def __add__(self, other_radius: int, other_lenght: float):
new_circle = Circle(self.radius, self.lenght)
new_circle.radius += other_radius.radius
new_circle.lenght += other_lenght.lenght
return new_circle
Ответы (1 шт):
Длину окружности можно рассчитать из радиуса (или наоборт, если угодно). Не бывает такого, что при радиусе n длина окружности не равна 2pi*r, а ваш код позволяет задать вообще произвольную пару значений.
В общем код будет выглядеть так (pass по аналогии перепишите из уже сделанных методов)
class Circle:
def __init__(self, radius: int):
self.radius = radius
def circ_len(self): # длина окружности
return self.radius*3.14*2
def __eq__(self, other): # ==
return self.radius == other.radius
def __lt__(self, other): # <
return self.circ_len() < other.circ_len()
def __le__(self, other): # <=
pass
def __gt__(self, other): # >
pass
def __ge__(self, other): # >=
pass
def __add__(self, num: int): # +
return Circle(self.radius+num)
def __iadd__(self, num: int): # +=
self.radius += num
def __sub__(self, num: int): # +
pass
def __isub__(self, num: int): # +
pass
Можно, конечно, хранить длину как переменную, тогда метод circ_len нам не нужен, но придется обновлять переменную в методах вроде __iadd__, но в тоже время это позволит нам не вычислять ее каждый раз при сравнении:
def __init__(self, radius):
self.radius = radius
self.length = self.radius*3.14*2
def __lt__(self, other): # <
return self.length < other.length
def __iadd__(self):
self.radius += num
self.length = self.radius*3.14*2