Урок 72. Множественное наследование

📁 Блок: Python Fundamentals / OOP ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#hasattr #class #mro #help #super #classmethod #pass #print #def #if #not #raise #from #max #else #return #append #in #for #mkdir #and #add #try #except #open #write #with #as

⚡ Кратко: суть урока

Урок про множественное наследование: как один класс может получать поведение сразу от нескольких родителей, в каком порядке Python ищет методы (MRO), и как super() помогает вызывать методы по этому порядку. Также разберём миксины, функцию hasattr и альтернативу наследованию — композицию и агрегацию.

  • Синтаксис множественного наследования: class Child(Parent1, Parent2):.
  • Порядок родителей влияет на выбор метода при совпадающих именах.
  • Class.__mro__ показывает линейный порядок поиска методов.
  • super() вызывает следующий метод в этой цепочке.
  • Миксины добавляют поведение, но не хранят состояние и не создаются сами по себе.
  • Композиция и агрегация позволяют собирать объекты из частей без наследования.

Что запомнить: наследование — это «является», композиция/агрегация — это «содержит».

Частая ошибка: менять порядок родителей и удивляться, почему вызвался не тот метод.

О чём этот урок

Мы уже умеем наследовать один класс от другого. Теперь научимся наследовать сразу от нескольких классов — это называется множественным наследованием. Разберёмся, как Python решает конфликты имён, как работает super() в таких цепочках, и зачем нужны миксины. Также познакомимся с hasattr для проверки наличия атрибутов и с композицией и агрегацией как альтернативой наследованию.

Что изучим

  • Синтаксис множественного наследования и его особенности.
  • Проблема ромба (diamond problem) и как Python её решает.
  • Порядок поиска методов: слева направо, вглубь, затем общий предок.
  • MRO — Method Resolution Order, атрибут __mro__.
  • Функция hasattr(obj, name) и её применение в миксинах.
  • Миксины: AuthMixin, NotificationMixin, UserProfile.
  • super() в множественном наследовании.
  • Композиция и агрегация: отличия и примеры.
  • Современные практики: аннотации типов и осознанный выбор между наследованием и композицией.

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

  • ← Урок 71 — Summary session 18
  • Создание классов, наследование, метод __init__, параметр self.
  • Принципы ООП: наследование и полиморфизм.
  • Функции isinstance и issubclass.

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

  • → Урок 73 — Practice 18
  • Попрактикуйтесь в создании собственных миксинов и классов с множественным наследованием.
  • Сравните, где удобнее наследование, а где — композиция.