Урок про множественное наследование: как один класс может получать поведение сразу от нескольких родителей, в каком порядке 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) и её применение в миксинах.