все Python 3ООПфункция
__add__
магические методы
Метод оператора +: a + b вызывает a.__add__(b). Вернув NotImplemented, метод передаёт ход b.__radd__(a).
Синтаксис
def __add__(self, other): ...
Если __add__ не умеет складывать с объектом такого типа, нужно вернуть NotImplemented, а не бросить TypeError: тогда Python попробует отражённый __radd__ второго операнда и только потом сообщит об ошибке. Операция a += b сначала ищет __iadd__ и лишь без него откатывается к __add__ — у неизменяемых типов так и задумано.
Примеры
class Money:
def __init__(self, amount):
self.amount = amount
def __add__(self, other):
if not isinstance(other, Money):
return NotImplemented
return Money(self.amount + other.amount)
print((Money(5) + Money(7)).amount) # → 12
class Money:
def __init__(self, amount):
self.amount = amount
def __add__(self, other):
return NotImplemented
Money(1) + 2 # → TypeError: unsupported operand type(s) for +
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности