Выбор ответа Middle ООП и dataclasses спрашивают часто обновлено
MRO в ромбовидном наследовании
Вопрос
Каким будет D.__mro__ (без object)?
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: D, B, C, A. C3-линеаризация гарантирует: потомок идёт раньше предков, и порядок родителей из объявления D(B, C) сохраняется.
Варианты ответа
D, B, A, CD, C, B, AD, A, B, CD, B, C, Aправильный ответ
Разбор
C3-линеаризация гарантирует: потомок идёт раньше предков, и порядок родителей из объявления D(B, C) сохраняется. A общий предок B и C, поэтому он встанет после обоих. Поиск в глубину «D, B, A, C» был в старых классах Python 2 и ломал ромб: A проверялся раньше C.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что вызывается при создании экземпляра
Следующий вопрос
Двойное подчёркивание в имени атрибута