Снова о переопределении методов
Часть раздела 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() и получает правильное поведение.
Ключевой момент: Полиморфизм позволяет вам одинаково работать с различными объектами через общий интерфейс. Переопределение методов обеспечивает различные реализации, в то время как полиморфизм позволяет вызывать их единообразно. Это делает код более гибким и простым для расширения.
Задание
СреднеВ этом испытании вы реализуете систему наследования транспортных средств.
Вам нужно будет отредактировать следующие файлы:
vehicle.py: Реализуйте базовый классVehicleс атрибутами make/model и методамиcar.py: Создайте классCar, который наследуется отVehiclemotorcycle.py: Создайте классMotorcycle, который наследуется отVehicletruck.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))В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Object Oriented Programming
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — Простой калькулятор4Наследование
Базовое наследованиеФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовИтоги — Иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy5Полиморфизм
Снова о переопределении методовУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовИтоги — Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыИтоги — Менеджер банковского счета6Инкапсуляция
Public, Protected, Private члены классаМодификаторы доступаСокрытие данныхДекораторы property: продвинутый уровеньИтоги: Система учета студентов12Проект: Управление библиотекой
Обзор проектаКлассы Book и UserСистема выдачи книгФункционал поискаИнтерфейс администратораТестирование и интеграция