Что такое Method Resolution Order в Python 2
Python
Senior
Без компании
Что такое Method Resolution Order в Python 2
Ответы
MRO (Method Resolution Order) в Python 2 определяет порядок поиска методов при множественном наследовании. В Python 2 используется алгоритм **depth-first, left-to-right** для классических классов (без наследования от `object`) и алгоритм **C3 linearization** для новых классов (унаследованных от `object`).
Пример с классическим классом (Python 2):
```
class A:
def foo(self):
print("A")
class B(A):
pass
class C(A):
def foo(self):
print("C")
class D(B, C):
pass
d = D()
d.foo() # Выведет "A" (depth-first поиск)
```
Пример с новым классом:
```
class A(object):
def foo(self):
print("A")
class B(A):
pass
class C(A):
def foo(self):
print("C")
class D(B, C):
pass
d = D()
d.foo() # Выведет "C" (C3 linearization)
```
C3 алгоритм предотвращает проблемы с ромбовидным наследованием и обеспечивает более предсказуемый порядок. Можно посмотреть MRO через `ClassName.__mro__`.