class Child(Parent1, Parent2): — множественное наследование.
hasattr(obj, "name") — проверка наличия атрибута.
Class.__mro__ — кортеж классов в порядке разрешения методов.
super().method() — вызов следующего метода в MRO.
Миксин — вспомогательный класс с поведением, без собственного состояния.
Композиция — объект создаёт внутренний сам; агрегация — получает извне.
Общий синтаксис
class Parent1:
def method(self) -> None:
...
class Parent2:
def method(self) -> None:
...
class Child(Parent1, Parent2):
def method(self) -> None:
super().method() # следующий метод в MRO
Функция hasattr
Запись
Что делает
Пример
hasattr(obj, "attr")
Возвращает True, если у объекта есть атрибут
hasattr(user, "email")
hasattr(obj, "method")
Проверяет наличие метода
hasattr(report, "save")
hasattr(Class, "attr")
Проверяет наличие атрибута у класса
hasattr(Book, "library_name")
MRO и __mro__
Запись
Что возвращает
Пример
Class.__mro__
Кортеж классов в порядке поиска методов
D.__mro__
Class.mro()
Тот же порядок в виде списка
D.mro()
help(Class)
Показывает MRO и структуру класса
help(D)
Функция super()
Запись
Когда использовать
Пример
super().__init__()
Вызов следующего __init__ в MRO
super().__init__(name)
super().method()
Вызов следующего method в MRO
super().action()
Parent.method(self)
Явный вызов конкретного родителя (избегайте в множественном наследовании)
A.action(self)
Миксины
Признак
Описание
Имя
Обычно заканчивается на Mixin
Состояние
Обычно не определяет __init__
Назначение
Добавляет поведение через множественное наследование