class C:

Код напечатает 5, 16 и −1 на отдельных строках. Каждый переопределённый calculate() вызывает следующую реализацию по MRO через super(), после чего добавляет свою часть вычисления.

Короткий ответ

Что ответить на собеседовании

Код напечатает 5, 16 и −1 на отдельных строках. Каждый переопределённый calculate() вызывает следующую реализацию по MRO через super(), после чего добавляет свою часть вычисления.

Подробный разбор

Ответ с пояснениями

Условие

class C: def init(self, x): self.x = x

def calculate(self):
    return self.x * 2 + 1

class A(C): def init(self, x, y): super().init(x) self.y = y

def calculate(self):
    return super().calculate() + self.y

class B(A): def init(self, x, y, z): super().init(x, y) self.z = z

def calculate(self):
    return self.z - super().calculate()

a = C(2) b = A(4, 7) c = B(1, 3, 5)

print(a.calculate()) print(b.calculate()) print(c.calculate())

Ответ

Код напечатает 5, 16 и −1 на отдельных строках. Каждый переопределённый calculate() вызывает следующую реализацию по MRO через super(), после чего добавляет свою часть вычисления.

Для a = C(2): 2 × 2 + 1 = 5. Для b = A(4, 7): метод C даёт 9, затем A добавляет 7 и получает 16. Для c = B(1, 3, 5): C даёт 3, A добавляет 3 и получает 6, после чего B вычисляет 5 − 6 = −1. Конструкторы также проходят по цепочке super(), поэтому нужные поля x, y и z установлены на одном объекте c.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее