Продолжаем разбирать магические методы! После арифметики из прошлого поста переходим к сравнениям:
eq() – для равенства ==
ne() – для неравенства !=
lt() – для оператора меньше <
le() – для оператора меньше или равно <=
gt() – для оператора больше >
ge() – для оператора больше или равно >=
По умолчанию первый и второй метод сравнивают 🆔 объектов. Поэтому технически норм, при вызове ошибок не будет. Но реализация конечно будет не такой как вы ожидали увидеть). А если для того же класса Clock из прошлого поста сравнивать другими операциями, то вообще вылезут ошибки.
Но их можно легко исправить.
def __eq__(self, other):
if not isinstance(other, (int, Clock)):
raise TypeError('Оперант справа должен иметь тип int или Clock')
other_seconds = other if isinstance(other, int) else other.seconds
return self.seconds == other_seconds
Пример:
c1 = Clock(1000)
c2 = Clock(1000)
print(c1 == c2) # True
Другие методы можете сами догадаться как прописывать, аналогично этому
__eq__Занимательный факт: можно дополнительно не реализовывать метод для сравнения на неравенство - (ne) , если уже реализован (eq). Как думаете почему? А если реализовали метод "<", сработает ли ">"?🧐🧐🧐
Подсказка