Python Glossary English

все 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Сообщить о неточности