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 подскажет развёрнутый ответ в реальном времени.