Как в Python обратиться к методам родительского класса из дочернего?

«Как в Python обратиться к методам родительского класса из дочернего?» — вопрос из категории ООП, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для вызова методов родительского класса в Python используется встроенная функция super().

Это основной и рекомендуемый способ, так как он обеспечивает гибкость и корректно работает со сложными иерархиями наследования, включая множественное наследование, следуя Method Resolution Order (MRO).

Зачем это нужно?

Чаще всего super() используется для расширения, а не полного переопределения функциональности родительского метода. Например, чтобы вызвать конструктор родителя и добавить к нему новую логику в дочернем классе.

Пример:

class Vehicle:
    def __init__(self, brand):
        print("Инициализация Vehicle")
        self.brand = brand

    def display_info(self):
        print(f"Бренд: {self.brand}")

class Car(Vehicle):
    def __init__(self, brand, model):
        # 1. Вызываем __init__ родительского класса (Vehicle)
        super().__init__(brand)
        print("Инициализация Car")
        self.model = model

    def display_info(self):
        # 2. Вызываем display_info родителя, чтобы не дублировать код
        super().display_info()
        # 3. Дополняем его новой информацией
        print(f"Модель: {self.model}")

# Создаем экземпляр дочернего класса
my_car = Car("Tesla", "Model S")
my_car.display_info()

Вывод:

Инициализация Vehicle
Инициализация Car
Бренд: Tesla
Модель: Model S

Ключевые преимущества super():

  • Поддержка MRO: Гарантирует правильный порядок вызова методов в цепочке наследования.
  • Гибкость: Не нужно жестко прописывать имя родительского класса (Vehicle.__init__(self, ...)), что упрощает рефакторинг.
  • Краткость: В Python 3 вызов super() не требует аргументов.