Есть такой код:
class Number:
def __init__(self, start):
self.data = start
def __sub__(self, other):
return Number(self.data - other)
X = Number(5)
Y = X - 2
print(Y.data)
В нём переопределяется оператор вычитания. И в общем понятно что происходит в представленном коде. Но следующая строка не понятна:
Y = X - 2
Объясните пожалуйста почему запись X - 2 вызывает метод __sub__()? Этому есть какое-нибудь техническое объяснение или нужно просто запомнить, что если:
1. записать экземпляр класс (X)
2. после него записать минус (-)
3. после него записать какой-нибудь другой экземпляр класса
, то сработает метод __sub__(), в аргумент которого каким-то неведомым, но надёжным способом попадёт __str__() представление экземпляра класса из пункта 3 (то есть число 2).