Встречается на собеседованиях • сегодня
Какое изменение произошло при переходе из MRO2 в MRO3
В Python 2 использовался алгоритм MRO (Method Resolution Order) depth-first left-to-right, который мог приводить к неожиданным результатам при множественном наследовании. В Python 3 был реализован алгоритм C3 Linearization (MRO3), который решает эту проблему.
Ключевые отличия:
1. C3 гарантирует сохранение порядка родительских классов
2. Предотвращает неоднозначности в наследовании
3. Вызывает ошибку, если невозможно построить непротиворечивый порядок
Пример проблемного наследования в Python 2:
```python
class A(object): pass
class B(A): pass
class C(A): pass
class D(B, C): pass
# В Python 2 порядок: D -> B -> A -> C -> A (дублирование A)
```
В Python 3 этот же код даст корректный порядок:
```python
print(D.__mro__) # (, ,
# , , )
```

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы