Снова о переопределении методов
Часть раздела 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 содержит тестовые случаи, которые проверят правильность работы вашей реализации для всех типов транспортных средств.
Шпаргалка
Полиморфизм позволяет объектам разных классов по-разному реагировать на один и тот же вызов метода через переопределение методов.
Создайте родительский класс с методом:
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!"Вызовите один и тот же метод для разных объектов:
animals = [Dog(), Cat(), Animal()]
for animal in animals:
print(animal.speak()) # Каждый выводит разный результатИспользуйте полиморфизм с функциями:
def make_animal_speak(animal):
print(animal.speak())
make_animal_speak(Dog()) # Woof!
make_animal_speak(Cat()) # Meow!Полиморфизм позволяет вам одинаково обращаться с разными объектами через общий интерфейс, что делает код более гибким и простым в расширении.
Попробуйте сами
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