Шаг 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); сложение должно возвращать новое значение, как у чисел и строк.