Выбор ответа 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) сохраняется.

Варианты ответа

  1. D, B, A, C
  2. D, C, B, A
  3. D, A, B, C
  4. D, B, C, Aправильный ответ

Разбор

C3-линеаризация гарантирует: потомок идёт раньше предков, и порядок родителей из объявления D(B, C) сохраняется. A общий предок B и C, поэтому он встанет после обоих. Поиск в глубину «D, B, A, C» был в старых классах Python 2 и ломал ромб: A проверялся раньше C.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме