Перейти к содержанию

Начало урока

Магические (dunder) методы

Подключите свои классы к встроенному синтаксису Python

Главная идея: магический метод (или dunder-метод, от англ. "double underscore" — двойное подчёркивание) — это специально названный метод, например __str__ или __eq__, который Python вызывает за вас, когда вы используете обычный синтаксис: print(obj), a == b, len(obj) или a + b. Вы почти никогда не вызываете их по имени; вы их определяете, чтобы ваши объекты вели себя как встроенные типы.
К концу этой темы вы сможете:
  • объяснить, что такое dunder-методы и когда Python их вызывает,
  • придать объектам читаемый вид с помощью __repr__ и __str__,
  • определить равенство по значению через __eq__,
  • заставить len() и проверку истинности работать через __len__,
  • перегрузить операторы + и * через __add__ и __mul__,
  • оценить компромиссы, включая NotImplemented и связь равенства с хешированием.

1. Что такое dunder-метод?

Каждый раз, когда вы пишете a + b, len(x) или print(obj), Python незаметно превращает этот синтаксис в вызов метода объекта. Имена таких методов окружены двойными подчёркиваниями — __add__, __len__, __str__ — поэтому программисты называют их "dunder" (double-under). Их также называют специальными методами.

Аналогия: представьте dunder-методы как электрические розетки в стене. Стена (Python) уже умеет подавать питание через стандартную розетку. Когда ваш класс предоставляет подходящую розетку — правильное имя и форму метода — встроенный механизм подключается напрямую. Вы не переделываете проводку в доме; вы просто вставляете стандартную вилку, чтобы len(), == и print() знали, что делать с вашим объектом.

Ключевая модель мышления: вы почти никогда не вызываете dunder-методы напрямую. Вы пишете естественный синтаксис, а Python сам направляет вызов к нужному dunder. Запись obj.__len__() работает, но весь смысл в том, что можно просто написать len(obj).

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя