Ответ
Переопределение метода (method overriding) — это механизм ООП, позволяющий дочернему классу предоставить собственную реализацию метода, который уже определён в родительском классе.
Когда метод вызывается у объекта дочернего класса, исполняется именно его версия, а не версия родительского класса. В Python для этого не нужны специальные ключевые слова — достаточно объявить в дочернем классе метод с тем же именем.
Пример:
class Animal:
def make_sound(self):
print("Издает какой-то звук")
class Dog(Animal):
# Переопределяем метод родительского класса
def make_sound(self):
print("Гав! Гав!")
animal = Animal()
dog = Dog()
animal.make_sound() # Вывод: Издает какой-то звук
dog.make_sound() # Вывод: Гав! Гав!
Расширение, а не замена, с помощью super()
Часто требуется не полностью заменить, а расширить поведение родительского метода. Для вызова реализации из родительского класса используется встроенная функция super().
class Car:
def __init__(self, brand):
self.brand = brand
print(f"Создан автомобиль марки {self.brand}.")
class ElectricCar(Car):
def __init__(self, brand, battery_size):
# Сначала вызываем __init__ родительского класса
super().__init__(brand)
# Затем добавляем свою логику
self.battery_size = battery_size
print(f"Это электромобиль с батареей {self.battery_size} кВт⋅ч.")
my_tesla = ElectricCar("Tesla", 100)
Начиная с Python 3.12, можно использовать декоратор @typing.override для явного указания намерения переопределить метод, что помогает статическим анализаторам находить ошибки.