Урок 78. Магические методы

📁 Блок: OOP ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#not #sorted #total_ordering #del #in #len #bool #if #isinstance #print #from #import #class #def #return #lower #strip #items #join #raise #for #id #while #else #super #add #append #sum #iter #and #repr #try #except #as #datetime #is #mkdir #max

⚡ Кратко: суть темы

Магические (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__. Управляем логическим значением объекта и превращаем его в вызываемый.

📚 Что повторить перед изучением

🎯 Что изучать дальше