Python полностью поддерживает множественное наследование, позволяя классу одновременно наследоваться от нескольких базовых классов.
class C(A, B):
pass
Чтобы разрешить неоднозначность, когда несколько родительских классов определяют один и тот же метод, Python использует C3 линеаризацию — алгоритм, который определяет последовательный и предсказуемый порядок поиска методов.
Итоговый порядок хранится в атрибуте класса __mro__ и может быть также просмотрен с помощью метода mro():
C.__mro__
# (<class 'C'>, <class 'A'>, <class 'B'>, <class 'object'>)
Алгоритм следует этим ключевым правилам:
Этот механизм элегантно решает классическую проблему ромба — когда два родительских класса имеют общего предка — гарантируя, что каждый класс в иерархии посещается ровно один раз в последовательном порядке.
class D(B, C): # Оба B и C наследуются от A
pass
# MRO: D → B → C → A → object
Ты можешь использовать super() для делегирования вызовов методов вдоль цепочки MRO, обеспечивая кооперативное и предсказуемое поведение во всех родительских классах.
Алгоритм C3 линеаризации в Python гарантирует, что класс появляется в MRO только один раз, независимо от того, сколько раз он может быть унаследован через разные родительские классы.
Новый — ещё не проверен сообществом
Вы