Что произойдёт при попытке выполнения следующего кода?

Возникнет TypeError из-за неправильного числа аргументов. super() найдёт C.f по MRO, но при вызове передаст экземпляр, а метод C.f объявлен без параметра self.

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

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

Возникнет TypeError из-за неправильного числа аргументов. super() найдёт C.f по MRO, но при вызове передаст экземпляр, а метод C.f объявлен без параметра self.

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

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

Условие

Что произойдёт при попытке выполнения следующего кода?

class C:
    def f():
        pass
class D:
    def f(self):
        pass
class E(C,D):
    def f(self):
        super().f()
E().f()
  • Будет вызван метод класса D, поскольку подходящий метод отсутствует в классе C
  • Произойдёт ошибка, связанная с отсутствием метода у объекта класса
  • Произойдёт ошибка, связанная с попыткой вызвать функцию от списка
  • Будет вызван метод класса C
  • Произойдёт ошибка, связанная с передачей неправильного числа аргументов

Ответ

Возникнет TypeError из-за неправильного числа аргументов. super() найдёт C.f по MRO, но при вызове передаст экземпляр, а метод C.f объявлен без параметра self.

Порядок разрешения здесь E → C → D → object. Python не пропускает найденный метод из-за неподходящей сигнатуры и не ищет вместо него D.f. Тело C.f не выполнится: ошибка возникает при связывании аргументов вызова. Для обычного метода нужен self; staticmethod имел бы другую семантику.

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

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

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

Подробнее