Ответ
Для вызова методов родительского класса в 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()не требует аргументов.