Встречается на собеседованиях • сегодня

Какая причина изменений в Python в механизме MRO

В Python 3 механизм MRO (Method Resolution Order) был изменён с алгоритма глубинного поиска (DFS) на алгоритм C3. Основная причина — устранение проблем с неоднозначностью порядка разрешения методов в сложных иерархиях множественного наследования.

Пример проблемы в Python 2 (DFS):

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

class B(A):
pass

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

class D(B, C):
pass

D().method() # В Python 2 выведет "A", хотя логичнее "C"

text

C3-линеаризация гарантирует:
1. Консистентность: если класс X предшествует Y в MRO, то так будет во всех подклассах
2. Монотонность: порядок в родительских классах сохраняется в дочерних
3. Локальный приоритет: дочерний класс имеет приоритет перед родительским

Для Python 3 тот же пример даст ожидаемый результат "C", так как C3 учитывает порядок наследования (D → B → C → A).
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы