Menu
Coddy logo textTech

Снова о переопределении методов

Часть раздела Object Oriented Programming путешествия по Python на Coddy — урок 23 из 64.

Полиморфизм означает «много форм» и позволяет объектам разных классов по-разному реагировать на один и тот же вызов метода. Переопределение методов делает это возможным.

Вот родительский класс с методом:

class Animal:
    def speak(self):
        return "Animal makes a sound"

Создайте дочерние классы, которые переопределяют один и тот же метод:

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

class Cow(Animal):
    def speak(self):
        return "Moo!"

Каждый дочерний класс предоставляет свою собственную реализацию speak().

Создайте список различных животных:

animals = [Dog(), Cat(), Cow(), Animal()]

Вызовите один и тот же метод для всех объектов:

for animal in animals:
    print(animal.speak())

Вывод:

Woof!
Meow!
Moo!
Animal makes a sound

Это полиморфизм в действии — один и тот же вызов метода ведет себя по-разному в зависимости от фактического типа объекта.

Вы также можете использовать полиморфизм с функциями:

def make_animal_speak(animal):
    print(animal.speak())

dog = Dog()
cat = Cat()

make_animal_speak(dog)  # Гав!
make_animal_speak(cat)  # Мяу!

Функции не нужно знать, какой тип животного она получает — она просто вызывает speak() и получает правильное поведение.

Ключевой момент: Полиморфизм позволяет вам одинаково работать с различными объектами через общий интерфейс. Переопределение методов обеспечивает различные реализации, в то время как полиморфизм позволяет вызывать их единообразно. Это делает код более гибким и простым для расширения.

challenge icon

Задание

Средне

В этом испытании вы реализуете систему наследования транспортных средств.

Вам нужно будет отредактировать следующие файлы:

  • vehicle.py: Реализуйте базовый класс Vehicle с атрибутами make/model и методами
  • car.py: Создайте класс Car, который наследуется от Vehicle
  • motorcycle.py: Создайте класс Motorcycle, который наследуется от Vehicle
  • truck.py: Создайте класс Truck, который наследуется от Vehicle

Каждый файл содержит подробные комментарии TODO, которые помогут вам реализовать задачу шаг за шагом. Обратите внимание на инструкции импорта, необходимые между файлами, и соблюдайте отношения наследования. Файл driver.py содержит тестовые случаи, которые проверят правильность работы вашей реализации для всех типов транспортных средств.

Попробуйте сами

from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from truck import Truck

def vehicle_info(vehicle):
    return f"{vehicle.make} {vehicle.model}: {vehicle.start()}, Efficiency: {vehicle.fuel_efficiency()} mpg"


# Тестирование с различными транспортными средствами - НЕ ИЗМЕНЯЙТЕ ЭТОТ ТЕСТОВЫЙ КОД
vehicles = [
    Car("Toyota", "Camry"),
    Motorcycle("Harley", "Davidson"),
    Truck("Ford", "F-150"),
    Vehicle("Generic", "Vehicle")
]

for v in vehicles:
    print(vehicle_info(v))
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Object Oriented Programming