Что такое магические методы (dunder methods) в Python?

Ответ

Магические методы в 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)

Использование магических методов позволяет создавать классы, которые ведут себя как встроенные типы данных, делая код более читаемым и интуитивным.