Выбор ответа Senior ООП и dataclasses обновлено
Что на самом деле вызывает super()
Вопрос
Что вызывает super().greet() внутри метода класса B, если объект создан из D(B, C), где B и C наследуют A?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: C.greet: следующий класс после B в MRO объекта D. super() ищет метод в MRO типа объекта, начиная с класса, следующего за текущим.
Варианты ответа
A.greet: прямой родительBC.greet: следующий класс послеBв MRO объектаDправильный ответD.greet: класс самого объекта- Все методы
greetродителей по очереди
Разбор
super() ищет метод в MRO типа объекта, начиная с класса, следующего за текущим. Для экземпляра D порядок D, B, C, A, поэтому из B попадём в C, хотя C не родитель B. Так кооперативное наследование вызывает каждый метод ромба ровно один раз. Автоматического вызова всех родителей нет: цепочка идёт, только если каждый метод сам вызывает super().
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.