Исправление поведения наследования в Python

Вызовите явно Ancestor.start на экземпляре с именем 'bob'. Исходный Child('Bob') ничего не печатает, а обычный bob.start() выбрал бы Parent1.start по MRO.

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

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

Вызовите явно Ancestor.start на экземпляре с именем 'bob'. Исходный Child('Bob') ничего не печатает, а обычный bob.start() выбрал бы Parent1.start по MRO.

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

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

Условие

Требуется откорректировать работу программы так, чтобы при её выполнении в консоль выводилась строка Ancestor bob: start.

class Ancestor:
    def __init__(self, name):
        self.name = name

    def start(self):
        print(f"Ancestor {self.name}: start")

    def rewind(self):
        print(f"Ancestor {self.name}: rewind")

class Parent1(Ancestor):
    def start(self):
        print(f"Parent1 {self.name}: start")

    def open(self):
        print(f"Parent1 {self.name}: open")

class Parent2(Ancestor):
    def start(self):
        super().start()
        print(f"Parent2 {self.name}: start")

    def open(self):
        print(f"Parent2 {self.name}: open")

    def close(self):
        print(f"Parent2 {self.name}: close")

    def flush(self):
        print(f"Parent2 {self.name}: flush")

class Child(Parent1, Parent2):
    def flush(self):
        print(f"Child {self.name}: flush")

bob = Child("Bob")

Ответ

Вызовите явно Ancestor.start на экземпляре с именем 'bob'. Исходный Child('Bob') ничего не печатает, а обычный bob.start() выбрал бы Parent1.start по MRO.

Минимальное решение для точного требуемого текста:

bob = Child('bob')
Ancestor.start(bob)
# Ancestor bob: start

Регистр имени важен: с 'Bob' строка тоже содержала бы заглавную B. Если нужно изменить именно поведение Child.start, определите в Child метод, вызывающий Ancestor.start(self). Это намеренно обходит промежуточные реализации. Обычный super() из Child пойдёт в Parent1, а Parent2.start дополнительно печатает собственную строку, поэтому не даёт только требуемый вывод.

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

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

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

Подробнее