Sobes.tech
Junior — Middle
69

Можете объяснить, что означает термин MRO в контексте множественного наследования?

Companies where asked
БилайнБилайн

Answer from AI

sobes.tech AI

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

Когда класс наследует несколько родителей, может возникнуть неоднозначность, какой метод вызвать, если он определён в нескольких базовых классах. MRO определяет последовательность обхода этих классов.

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

  • Последовательный и предсказуемый порядок поиска.
  • Сохранение порядка наследования, указанного в определении класса.
  • Отсутствие конфликтов и циклов в иерархии.

Пример:

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())  # [D, B, C, A, object]

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

Таким образом, MRO помогает понять, какой метод будет вызван при множественном наследовании.