Sobes.tech
Back to questions
Junior — Middle
53

Как осуществляется последовательность вызова методов в случае множественного наследования в Python?

Companies where asked
ООО Цитадель
AGIMA
Стилсофт
Вкусно и точкаВкусно и точка

Answer from AI

sobes.tech AI

В Python при множественном наследовании порядок вызова методов определяется алгоритмом разрешения порядка методов (Method Resolution Order, MRO). MRO — это линейный порядок, в котором Python ищет методы и атрибуты в классах при вызове.

MRO строится с помощью алгоритма C3-линеаризации, который гарантирует, что:

  • Класс всегда предшествует своим родителям.
  • Порядок наследования сохраняется.
  • Нет конфликтов при разрешении порядка.

Для просмотра MRO класса можно использовать атрибут __mro__ или функцию mro():

class A:
    def method(self):
        print("A")

class B(A):
    def method(self):
        print("B")

class C(A):
    def method(self):
        print("C")

class D(B, C):
    pass

print(D.__mro__)
# (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)

obj = D()
obj.method()  # Вызовет метод из B, так как B идет раньше C в MRO

Таким образом, при вызове метода Python последовательно ищет его в классах согласно MRO, начиная с самого производного класса.