Множественное наследование
Часть раздела Object Oriented Programming путешествия по Python на Coddy — урок 20 из 64.
Множественное наследование позволяет классу наследоваться от более чем одного родительского класса, объединяя функциональность из разных источников.
Вот два родительских класса:
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Flyable:
def fly(self):
return f"{self.name} is flying"Создайте дочерний класс, который наследуется от обоих родителей:
class Bird(Animal, Flyable):
def __init__(self, name, species):
super().__init__(name) # Вызывает __init__ класса Animal
self.species = species
def sing(self):
return f"{self.name} is singing"Синтаксис class Bird(Animal, Flyable): означает, что Bird наследует как от Animal, так и от Flyable.
Создайте объект bird и используйте методы обоих родителей:
sparrow = Bird("Sparrow", "House sparrow")Вызовите методы первого родительского класса:
print(sparrow.eat())Вызовите методы из второго родительского класса:
print(sparrow.fly())Вызовите собственный метод птицы:
print(sparrow.sing())Вывод:
Sparrow is eating
Sparrow is flying
Sparrow is singingВы можете проверить порядок наследования:
print(Bird.__mro__) # Порядок разрешения методовЭто показывает, какой родитель проверяется первым при поиске методов.
Ключевой момент: Множественное наследование использует синтаксис class Child(Parent1, Parent2):. Дочерний класс получает все методы от всех родительских классов. Python проверяет родительские классы слева направо при поиске методов.
Задание
СреднеВ этом испытании вы реализуете многофайловую систему классов, демонстрирующую множественное наследование на примере смартфонов. Каждый класс организован в отдельном файле для лучшей структуры кода.
Вам нужно будет отредактировать следующие файлы:
device.py— Реализуйте базовый классDeviceinternet.py— Реализуйте базовый классInternetsmartphone.py— Реализуйте классSmartphone, который наследуется от обоих базовых классовdriver.py— Реализуйте тестовые случаи, которые проверят правильность вашей реализации
Каждый файл содержит подробные комментарии TODO, которые будут направлять вас шаг за шагом в процессе реализации.
Шпаргалка
Множественное наследование позволяет классу наследоваться от более чем одного родительского класса, используя синтаксис class Child(Parent1, Parent2):
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Flyable:
def fly(self):
return f"{self.name} is flying"
class Bird(Animal, Flyable):
def __init__(self, name, species):
super().__init__(name) # Вызывает __init__ класса Animal
self.species = species
def sing(self):
return f"{self.name} is singing"Дочерний класс наследует все методы от всех родительских классов:
sparrow = Bird("Sparrow", "House sparrow")
print(sparrow.eat()) # Из класса Animal
print(sparrow.fly()) # Из класса Flyable
print(sparrow.sing()) # Собственный метод BirdПроверьте порядок разрешения методов (Method Resolution Order, MRO), чтобы увидеть, какой родитель проверяется первым:
print(Bird.__mro__) # Показывает порядок наследованияПопробуйте сами
# TODO: Импортируйте класс Smartphone из smartphone.py
# Создайте смартфон и протестируйте его методы
# TODO: Создайте объект Smartphone с брендом "Apple" и моделью "iPhone 13"
my_phone = None
# TODO: Вызовите и выведите результат метода power_on() смартфона
# TODO: Вызовите и выведите результат метода connect() смартфона
# TODO: Вызовите и выведите результат метода make_call() смартфона с параметром "123-456-7890"В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела 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