Что выведет код Senior ООП и dataclasses обновлено

Цепочка super в ромбе

Вопрос

Что выведет код? По строке на каждый print.

class A:
    def hi(self):
        return 'A'

class B(A):
    def hi(self):
        return 'B' + super().hi()

class C(A):
    def hi(self):
        return 'C' + super().hi()

class D(B, C):
    def hi(self):
        return 'D' + super().hi()

print(D().hi())
print(B().hi())

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: DBCA, BA. Для объекта D MRO равен D, B, C, A, и каждый super() идёт к следующему в этом порядке: DBCA.

Что выведет

DBCA
BA

Разбор

Для объекта D MRO равен D, B, C, A, и каждый super() идёт к следующему в этом порядке: DBCA. Для объекта B MRO B, A, поэтому тот же метод B.hi через super() попадает сразу в A. super() зависит от типа объекта, а не от того, где написан метод.

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

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

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