Ответ
Множественное наследование в Python — это механизм, позволяющий классу-потомку наследовать атрибуты и методы от нескольких родительских классов одновременно.
Основная сложность множественного наследования — разрешение конфликтов имен, когда несколько родительских классов реализуют метод с одинаковым названием. Для этого Python использует алгоритм MRO (Method Resolution Order).
MRO (Порядок разрешения методов)
MRO определяет точную последовательность, в которой Python ищет метод в иерархии классов. Этот порядок гарантирует, что поиск будет предсказуемым и непротиворечивым. Посмотреть MRO для класса можно с помощью атрибута __mro__
.
Пример
class Engine:
def start(self):
print("Engine started")
class Radio:
def play_music(self):
print("Playing music")
def start(self):
print("Radio started")
# Порядок наследования (Engine, Radio) важен для MRO
class Car(Engine, Radio):
pass
my_car = Car()
# Будет вызван метод start() из первого родителя в списке — Engine
my_car.start() # Вывод: Engine started
# MRO показывает порядок поиска: Car -> Engine -> Radio -> object
print(Car.__mro__)
Ключевые моменты
- Порядок важен: При вызове
my_car.start()
Python находит метод вEngine
и останавливает поиск. Если бы порядок былclass Car(Radio, Engine)
, вывелось быRadio started
. - Алгоритм C3: MRO строится на основе алгоритма линеаризации C3, который сохраняет локальный порядок старшинства и монотонность.
- Проблема ромба (Diamond Problem): MRO эффективно решает классическую проблему ромбовидного наследования, когда класс наследуется от двух классов, у которых есть общий предок.