Hardmrooop
Что такое MRO (Method Resolution Order)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
MRO — порядок разрешения методов в иерархии классов (особенно множественное наследование). Python 3 использует C3 linearization — консистентный, monotonic порядок.
class A:
def greet(self): print("A")
class B(A):
def greet(self): print("B"); super().greet()
class C(A):
def greet(self): print("C"); super().greet()
class D(B, C):
def greet(self): print("D"); super().greet()
print(D.__mro__)
# (D, B, C, A, object) — C3 порядок
D().greet() # D → B → C → A (diamond problem, C3 решает)super()делегирует следующему в MRO, не «родительскому классу»;- C3 гарантирует: child перед parent, порядок bases сохраняется, каждый класс один раз;
- Diamond problem — A → B, A → C, D наследует B и C: C3 даёт D → B → C → A;
- Mixin-классы удобны с cooperative multiple inheritance через
super().
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.