Viji
@Viji
DevOps Engineer

Как понять работу следующего кода по перегрузке операторов?

Привет всем,

class A:
    def __init__(self, a):
        self.a = a
    def __gt__(self, other):
        if(self.a>other.a):
            return True
        else:
            return False
ob1 = A(2)
ob2 = A(3)
if(ob1<ob2):
    print("ob2 is greater than ob1")
else:
    print("ob1 is greater than ob2")


почему данный метод работает
1) Ведь я использовал greater than, но использую сравнение lower than?
2) Оба экземпляра класса унаследовали магич метод __gt__(self, other), но его вызов происходит только у одного?
  • Вопрос задан
  • 157 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Потому что питон пытается "извернуться", если описаны не все операторы.
Если выполняется a < b, но не описан оператор a.__lt__(), питон попробует вызвать b.__gt__().
Аналогично, если не описан __ne__() а только __eq__(), и выполняется a != b, питон сделает not (a == b)
Кое что есть тут
Также советую глянуть в сторону functools.total_ordering.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы