Python Schoolby trefilov
Шаг 1 из 3+130 XP

Dunder-методы

__add__, __eq__, __len__ — операторы для своих классов.

Dunder-методы (магические методы)

Что это

Dunder = «double underscore», вокруг имени по два подчёркивания: __add__, __eq__, __len__. Это крючки, которые Python зовёт за тебя, когда ты пишешь +, ==, len(...). Реализуй нужный — и твой класс станет вести себя как встроенный тип.

Как это читать

class Money:
    def __init__(self, n): self.n = n
    def __add__(self, o):    return Money(self.n + o.n)
    def __repr__(self):      return f"${self.n}"
print(Money(5) + Money(3))  # $8

- Money(5) + Money(3) Python превращает в Money(5).__add__(Money(3)).
- __add__ возвращает новый объект (не меняет существующий).
- __repr__ определяет, что увидит print(...).

Пример

class Bag:
    def __init__(self, items): self.items = items
    def __len__(self):   return len(self.items)
    def __eq__(self, o): return self.items == o.items
print(len(Bag([1, 2, 3])))         # 3
print(Bag([1]) == Bag([1]))        # True

👍 Реализуй __repr__ всегда — он спасёт тебя при отладке.
👎 Не делай __add__ через мутацию (self.n += o.n); сложение должно возвращать новое значение, как у чисел и строк.