Расширение функциональности с помощью super()

В Python функция super() используется для вызова метода из родительского класса. Это особенно полезно при наследовании, когда вы хотите расширить или изменить поведение метода из суперкласса (родительского класса) в подклассе (дочернем классе). super() также необходима для правильной инициализации подклассов.
Чтобы понять, как super() может использоваться с методами и инициализацией классов, давайте рассмотрим пример животных, которые издают звуки. Мы создадим класс Animal и два подкласса: Dog и Cat.
class Animal:                       # Определяем класс с именем 'Animal'
    def __init__(self, species):
        self.species = species

    def speak(self):
        return 'Sounds...'

class Dog(Animal):                  # Определяем подкласс 'Dog', наследующий от 'Animal'
    def __init__(self, name):
        super().__init__('Dog')     # Вызываем метод '__init__' родителя с помощью 'super()'
        self.name = name            # Дополнительный атрибут 'name' для 'Dog'
        print(self.species)         # Выведет Dog

    def speak(self):
        original = super().speak()  # Вызываем метод 'speak' родителя с помощью 'super()'
        return original + ' Woof!'

class Cat(Animal):                  # Определяем подкласс 'Cat', наследующий от 'Animal'
    def __init__(self, name):
        super().__init__('Cat')     # Вызываем метод '__init__' родителя с помощью 'super()'
        self.name = name            # Дополнительный атрибут 'name' для 'Cat'

    def speak(self):
        original = super().speak()  # Вызываем метод 'speak' родителя с помощью 'super()'
        return original + ' Meow!'

dog = Dog('Rex')                              # Создаем экземпляр класса 'Dog'
cat = Cat('Fluffy')                           # Создаем экземпляр класса 'Cat'
print(dog.name, dog.species, dog.speak())     # Rex Dog Sounds... Woof!
print(cat.name, cat.species, cat.speak())     # Fluffy Cat Sounds... Meow!
Здесь оба подкласса Dog и Cat используют super().__init__(), чтобы вызвать метод __init__() своего суперкласса Animal. Это гарантирует, что каждый экземпляр Dog или Cat правильно инициализирован с соответствующим названием вида. Аналогично, метод speak() в обоих подклассах использует super().speak(), чтобы вызвать метод speak() из Animal, позволяя им включать исходный звук в свои собственные методы speak().
Таким образом, функция super() позволяет подклассу использовать и расширять поведение своего суперкласса. Она играет ключевую роль в повышении повторного использования кода, обеспечении правильной инициализации подклассов и поддержании кода модульным и читаемым. Это делает ее мощным инструментом в объектно-ориентированном программировании на Python.

Задача: классы транспортных средств

Вам нужно создать классы для различных видов транспортных средств. Эти классы должны моделировать некоторые свойства и поведение реальных транспортных средств.
  1. Класс Vehicle: базовый класс. Он должен иметь следующие атрибуты:
      • make: represents the manufacturer of the vehicle.
      • model: represents the specific model of the vehicle.
      • year: represents the year the vehicle was manufactured.
      • A method named honk() that, when called, prints the string Honk!.
  1. Класс Car: этот класс должен наследоваться от класса Vehicle. Он должен иметь все атрибуты и методы класса Vehicle, плюс следующие:
      • color: represents the color of the car.
      • It should override the honk() method of the Vehicle class. When called, this method should print the string Beep beep!.
  1. Класс Bicycle: этот класс также должен наследоваться от класса Vehicle. Он должен иметь все атрибуты и методы класса Vehicle, но ему нужно переопределить метод honk(). При вызове этот метод должен выводить Ring ring!.
Ваша задача — реализовать эти классы и методы.
Ввод
Вывод
car=Car('Tesla', 'Model S', 2022, 'Red'); bicycle=Bicycle('Schwinn', 'Fastback', 2020); car.honk(); bicycle.honk()
Beep beep! Ring ring!
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue