Что такое MRO
Python
Middle
Без компании
Что такое MRO
Ответы
**MRO (Method Resolution Order)** — это порядок, в котором Python ищет методы в иерархии классов при наследовании. Это особенно важно при множественном наследовании, когда один класс наследуется от нескольких родителей.
MRO определяет, в каком порядке Python будет искать вызываемый метод в цепочке классов. Реализован через алгоритм **C3 linearization**, который гарантирует, что:
- Подклассы имеют приоритет над суперклассами
- Порядок наследования сохраняется
### *Пример:*
```
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
# MRO: D -> B -> C -> A -> object
print(D.__mro__)
# (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
d = D()
d.method() # Выведет "B" (первый в порядке поиска)
```
**Ключевые особенности:**
**- Определяется при создании класса**
**- Можно посмотреть через** `ClassName.__mro__` **или** `ClassName.mro()`
**- Решает проблему "ромбовидного наследования"**
**Алгоритм C3**
Следует трем правилам:
- Порядок наследования ребенка важен
- Родительский класс проверяется после дочернего
- Порядок наследования из родительских классов сохраняется
**MRO обеспечивает предсказуемость** в scenarios множественного наследования, которые в других языках могут приводить к неоднозначностям.