Когда срабатывает __sub__()? Есть такой код: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).
Метод sub() срабатывает в момент, когда интерпретатор Python видит операцию вычитания (-) между двумя объектами. В данном случае, когда мы пишем X - 2, интерпретатор видит, что происходит операция вычитания между объектом X (экземпляром класса Number) и числом 2.
Так как оператор "-" не является коммутативным (первый объект перед "-", а второй после него), метод sub() будет вызван для объекта X, так как это объект слева от "-" в выражении.
Технически, интерпретатор Python будет искать метод sub() в классе объекта слева от "-", и если он найден, то он будет вызван, передав ему объект справа от "-" в качестве аргумента other.
Итак, нет ничего неведомого в этом поведении - это часть механики работы операторов в Python, и нужно просто помнить, что при использовании операторов между объектами, вызываются соответствующие магические методы в этих объектах.
Метод sub() срабатывает в момент, когда интерпретатор Python видит операцию вычитания (-) между двумя объектами. В данном случае, когда мы пишем X - 2, интерпретатор видит, что происходит операция вычитания между объектом X (экземпляром класса Number) и числом 2.
Так как оператор "-" не является коммутативным (первый объект перед "-", а второй после него), метод sub() будет вызван для объекта X, так как это объект слева от "-" в выражении.
Технически, интерпретатор Python будет искать метод sub() в классе объекта слева от "-", и если он найден, то он будет вызван, передав ему объект справа от "-" в качестве аргумента other.
Итак, нет ничего неведомого в этом поведении - это часть механики работы операторов в Python, и нужно просто помнить, что при использовании операторов между объектами, вызываются соответствующие магические методы в этих объектах.