Что выведет код 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 ошибок.