Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Магические (dunder) методы
Магические методы — это специальные методы Python с двойными подчёркиваниями с обеих сторон названия (от double underscore — dunder). Они определяют поведение объектов при взаимодействии с встроенными функциями и операторами.
Основные магические методы
Инициализация и финализация
__init__— конструктор, вызывается при создании объекта__new__— создание нового экземпляра класса (до__init__)__del__— деструктор, вызывается при удалении объекта
Представление объекта
__str__— строковое представление для пользователя (вызываетсяstr()иprint())__repr__— полное представление для разработчика (вызываетсяrepr())
Арифметические операции
__add__— сложение (+)__sub__— вычитание (-)__mul__— умножение (*)__truediv__— деление (/)__floordiv__— целочисленное деление (//)__mod__— остаток от деления (%)
Сравнение
__eq__— равенство (==)__ne__— неравенство (!=)__lt__— меньше (<)__le__— меньше или равно (<=)__gt__— больше (>)__ge__— больше или равно (>=)
Работа с контейнерами
__len__— длина объекта (len())__getitem__— доступ к элементу по индексу (obj[key])__setitem__— установка элемента (obj[key] = value)__delitem__— удаление элемента (del obj[key])__contains__— проверка принадлежности (in)__iter__— создание итератора__next__— следующий элемент в итераторе
Вызываемость
__call__— позволяет вызывать объект как функцию
Контекстные менеджеры
__enter__— вход в блокwith__exit__— выход из блокаwith
Примеры использования
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"Vector({self.x}, {self.y})"
def __repr__(self):
return f"Vector(x={self.x}, y={self.y})"
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __eq__(self, other):
return self.x == other.x and self.y == other.y
def __len__(self):
return 2
v1 = Vector(3, 4)
v2 = Vector(1, 2)
print(str(v1)) # Vector(3, 4)
print(repr(v1)) # Vector(x=3, y=4)
print(v1 + v2) # Vector(4, 6)
print(v1 == v2) # False
print(len(v1)) # 2
class Counter:
def __init__(self, start=0):
self.count = start
def __call__(self, increment=1):
self.count += increment
return self.count
def __lt__(self, other):
return self.count < other.count
counter = Counter()
print(counter()) # 1
print(counter(5)) # 6
other = Counter(10)
print(counter < other) # True
Практическое применение
Магические методы используются для:
- Перегрузки операторов — сделать объекты работающими с
+,-,*и т.д. - Интеграции с встроенными функциями — поддержка
len(),str(),iter() - Повышения удобства использования — класс ведёт себя как встроенный тип
- Реализации протоколов — контекстные менеджеры, итераторы, вызываемые объекты
Понимание магических методов критично для написания pythonic-кода и создания удобных интерфейсов классов.