Урок 78. Магические методы
⚡ Кратко: суть темы
Магические (dunder) методы позволяют вашим объектам вести себя как встроенные типы Python: сравниваться, складываться, индексироваться, вызываться и проверяться на истинность.
__eq__,__lt__и другие — для операторов сравнения.@total_orderingизfunctools— генерирует недостающие сравнения из одного метода.__getitem__,__setitem__,__contains__,__len__— для коллекций.__add__,__iadd__и др. — для арифметики.__bool__и__call__— для логики и вызываемых объектов.
Что запомнить: магические методы — это не «хаки», а публичный протокол Python; реализуя их, вы подключаете объект к стандартным операторам.
Частая ошибка: забыть вернуть NotImplemented, когда операнд неподходящего типа, или изменить объект там, где нужно создать новый.
📖 О чём этот урок
Урок посвящён специальным методам (dunder), которые позволяют переопределять поведение стандартных операторов и встроенных функций для пользовательских классов. Мы разберём сравнение, индексацию, арифметику, приведение к bool и вызов объекта как функции.
Что изучим
- Методы сравнения. Как работают
__eq__,__ne__,__lt__и почему важно возвращатьNotImplemented. - @total_ordering. Сокращаем шесть методов сравнения до двух без потери функциональности.
- Методы контейнеров. Делаем класс похожим на словарь или список.
- Арифметические методы. Складываем векторы и изменяем счётчики на месте.
__bool__и__call__. Управляем логическим значением объекта и превращаем его в вызываемый.