Как работает C3-линеаризация при множественном наследовании и когда возникает коллизия MRO?

C3 строит единый MRO, сохраняя порядок родителей и согласованность их собственных порядков. Конфликт возникает, когда требования несовместимы, например один путь требует A раньше B, а другой — B раньше A.

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

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

C3 строит единый MRO, сохраняя порядок родителей и согласованность их собственных порядков. Конфликт возникает, когда требования несовместимы, например один путь требует A раньше B, а другой — B раньше A.

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

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

C3 строит единый MRO, сохраняя порядок родителей и согласованность их собственных порядков. Конфликт возникает, когда требования несовместимы, например один путь требует A раньше B, а другой — B раньше A.

Алгоритм объединяет линеаризации родителей и список самих родителей. На каждом шаге выбирает голову списка, которой нет в хвостах остальных; если подходящей головы нет, создать класс нельзя. Python выдаёт TypeError при определении такого класса. super() следует полученному MRO, а не просто вызывает «непосредственного родителя». Порядок можно посмотреть через Class.__mro__, не угадывая его по картинке наследования.

Источник: github.com.

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

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

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

Подробнее