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 шт):

Автор решения: n1tr0xs

Длину окружности можно рассчитать из радиуса (или наоборт, если угодно). Не бывает такого, что при радиусе 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
→ Ссылка