Переопределение и расширение унаследованной функциональности
Одним из ключевых преимуществ наследования в Python является возможность переопределять и расширять унаследованную функциональность. Это означает, что вы можете изменить или добавить поведение родительского класса в дочернем классе, чтобы адаптировать функциональность к своим конкретным потребностям.
Переопределение унаследованных методов
Для переопределения унаследованного метода вы просто определяете метод в дочернем классе с тем же именем, что и метод в родительском классе. Когда вы вызываете метод для экземпляра дочернего класса, будет использоваться реализация метода из дочернего класса, а не из родительского.
## Base class
class Animal:
def speak(self):
print("The animal makes a sound.")
## Derived class
class Dog(Animal):
def speak(self):
print("The dog barks.")
## Create an instance of the derived class
my_dog = Dog()
my_dog.speak() ## Output: The dog barks.
В этом примере класс Dog
переопределяет метод speak()
класса Animal
, предоставляя более конкретную реализацию для собаки.
Расширение унаследованной функциональности
В дополнение к переопределению унаследованных методов вы также можете расширять функциональность родительского класса, добавляя новые методы или атрибуты в дочерний класс.
## Base class
class Vehicle:
def __init__(self, make, model):
self.make = make
self.model = model
def start(self):
print("The vehicle is starting.")
## Derived class
class ElectricCar(Vehicle):
def __init__(self, make, model, battery_capacity):
super().__init__(make, model)
self.battery_capacity = battery_capacity
def start(self):
print("The electric car is starting.")
def charge(self):
print("The electric car is charging.")
## Create an instance of the derived class
my_electric_car = ElectricCar("Tesla", "Model S", 100)
my_electric_car.start() ## Output: The electric car is starting.
my_electric_car.charge() ## Output: The electric car is charging.
В этом примере класс ElectricCar
расширяет класс Vehicle
, добавляя атрибут battery_capacity
и метод charge()
, а также переопределяя метод start()
.
Понимая, как переопределять и расширять унаследованную функциональность, вы можете создавать более гибкие и мощные классы на Python, которые соответствуют вашим конкретным требованиям.