Как в Python реализовано множественное наследование

Ответ

Да, Python поддерживает множественное наследование, позволяя классу наследовать атрибуты и методы от нескольких родительских классов.

Ключевым механизмом для разрешения конфликтов (например, когда несколько родительских классов имеют метод с одинаковым именем) является MRO (Method Resolution Order). Python использует алгоритм линеаризации C3, чтобы построить предсказуемую и последовательную цепочку вызовов.

Порядок разрешения определяется порядком указания базовых классов. Метод будет искаться сначала в текущем классе, затем в первом родительском классе из списка, затем во втором и так далее.

Пример:

class Engine:
    def start(self):
        print("Engine started")

class Radio:
    def play_music(self):
        print("Playing music")

# Car наследуется от Engine и Radio
class Car(Engine, Radio):
    pass

my_car = Car()
my_car.start()       # Метод из класса Engine
my_car.play_music()  # Метод из класса Radio

Посмотреть MRO для класса можно с помощью атрибута __mro__ или метода mro():

print(Car.__mro__)
# Вывод:
# (<class '__main__.Car'>, <class '__main__.Engine'>, <class '__main__.Radio'>, <class 'object'>)

Хотя множественное наследование — мощный инструмент, его следует использовать с осторожностью, так как оно может привести к сложной иерархии классов и проблемам, таким как "ромбовидное наследование" (diamond problem), которые MRO успешно решает.