Как устроен механизм разрешения методов (MRO) при множественном наследовании в Python — алгоритм C3-линеаризации? В каком случае интерпретатор выбросит ошибку TypeError: Cannot create a consistent method resolution order?

Python строит MRO алгоритмом C3, сохраняя порядок родителей и согласованность их собственных порядков. TypeError возникает, когда эти требования противоречат друг другу и единую последовательность построить нельзя.

Короткий ответ

Что ответить на собеседовании

Python строит MRO алгоритмом C3, сохраняя порядок родителей и согласованность их собственных порядков. TypeError возникает, когда эти требования противоречат друг другу и единую последовательность построить нельзя.

Подробный разбор

Ответ с пояснениями

Python строит MRO алгоритмом C3, сохраняя порядок родителей и согласованность их собственных порядков. TypeError возникает, когда эти требования противоречат друг другу и единую последовательность построить нельзя.

Например:

class X: pass
class Y: pass
class A(X, Y): pass
class B(Y, X): pass
# class C(A, B): pass  # TypeError: contradictory order

A требует X раньше Y, а B — наоборот. В C совместить требования невозможно. super() следует по MRO, а не обязательно обращается к непосредственному родителю из текста. Для существующего класса порядок можно посмотреть через mro или mro().

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее