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

Почему 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 гарантирует, что:
- Подклассы идут перед родительскими классами
- Порядок в списке базовых классов сохраняется
- Нет противоречий в порядке разрешения методов
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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