Когда срабатывает __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).

21 Авг 2019 в 06:59
190 +1
1
Ответы
1

Метод sub() срабатывает в момент, когда интерпретатор Python видит операцию вычитания (-) между двумя объектами. В данном случае, когда мы пишем X - 2, интерпретатор видит, что происходит операция вычитания между объектом X (экземпляром класса Number) и числом 2.

Так как оператор "-" не является коммутативным (первый объект перед "-", а второй после него), метод sub() будет вызван для объекта X, так как это объект слева от "-" в выражении.

Технически, интерпретатор Python будет искать метод sub() в классе объекта слева от "-", и если он найден, то он будет вызван, передав ему объект справа от "-" в качестве аргумента other.

Итак, нет ничего неведомого в этом поведении - это часть механики работы операторов в Python, и нужно просто помнить, что при использовании операторов между объектами, вызываются соответствующие магические методы в этих объектах.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир