Ответ
Магические методы в Python, также известные как dunder methods (от Double Underscore), — это специальные методы с двойными подчеркиваниями в начале и конце имени (например, __init__
или __str__
). Они позволяют классам эмулировать поведение встроенных типов и интегрироваться с синтаксисом языка.
Ключевая идея — перегрузка операторов. Вы не вызываете эти методы напрямую, их вызывает интерпретатор Python в ответ на определенные действия.
Основные примеры:
__init__(self, ...)
: Конструктор класса, вызывается при создании нового объекта.__str__(self)
: Возвращает строковое представление объекта для пользователя (используетсяprint()
иstr()
).__repr__(self)
: Возвращает официальное строковое представление для отладки (используетсяrepr()
).__add__(self, other)
: Позволяет использовать оператор сложения+
для объектов класса.__len__(self)
: Позволяет использовать функциюlen()
для объектов класса.
Практический пример — класс Vector
:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
# Перегрузка оператора сложения (+)
def __add__(self, other):
if not isinstance(other, Vector):
return NotImplemented
return Vector(self.x + other.x, self.y + other.y)
# Представление для print()
def __str__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(1, 2)
v2 = Vector(3, 4)
# __add__ вызывается неявно
v3 = v1 + v2
# __str__ вызывается неявно
print(v3) # Вывод: Vector(4, 6)
Использование магических методов позволяет создавать классы, которые ведут себя как встроенные типы данных, делая код более читаемым и интуитивным.