Встречается на собеседованиях • сегодня
Почему MRO отличается в python 2 и python 3
В Python 2 использовался алгоритм MRO (Method Resolution Order) depth-first, left-to-right, что могло приводить к проблемам с ромбовидным наследованием. В Python 3 был реализован алгоритм C3, который гарантирует предсказуемый и логичный порядок разрешения методов.
Пример проблемы в Python 2:
python
class A(object):
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
D().method() # В Python 2 выведет "B", в Python 3 тоже "B", но логика сложнее
text
Ключевые отличия:
1. Python 3 использует C3 linearization, который сохраняет монотонность
2. В Python 3 все классы неявно наследуются от object (new-style classes)
3. C3 решает проблемы с противоречивыми порядками наследования
Алгоритм C3 гарантирует, что:
- Подклассы идут перед родительскими классами
- Порядок в списке базовых классов сохраняется
- Нет противоречий в порядке разрешения методов
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы