Переопределение методов: повторение
Часть раздела Объектно-ориентированное программирование путешествия по 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с атрибутами марки и модели и методами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))В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Введение в ООПВнешние файлыКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — простой калькулятор4Наследование
Основы наследованияФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовПовторение: иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»2Декораторы
Введение в декораторыДекоратор свойстваДекоратор статического методаДекоратор метода класса5Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур8Продвинутые концепции ООП
Композиция и наследованиеМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыПовторение — менеджер банковского счёта6Инкапсуляция
Публичные, защищённые и приватные членыМодификаторы доступаСокрытие информацииПродвинутые декораторы свойствПовторение — система учёта студентов12Проект: Система управления библиотекой
Обзор проектаКлассы книг и пользователейСистема выдачи книгФункция поискаИнтерфейс администратораТестирование и интеграцияПотренируйтесь самостоятельно: Онлайн-компилятор Python