Menu
CoddyTech

Множественное наследование

Часть раздела Объектно-ориентированное программирование путешествия по 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.

Создай объект птицы и используй методы обоих родительских классов:

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 проверяет родительские классы слева направо.

challenge icon

Задание

Средне

В этом задании тебе предстоит реализовать систему классов из нескольких файлов, демонстрирующую множественное наследование на примере смартфонов. Каждый класс находится в отдельном файле, чтобы лучше организовать код.

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

  • device.py — реализовать базовый класс Device
  • internet.py — реализовать базовый класс Internet
  • smartphone.py — реализовать класс Smartphone, наследующий от обоих базовых классов
  • driver.py — реализовать тестовые случаи, которые проверят правильность работы твоей реализации

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

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

# TODO: Импортируйте класс Smartphone из smartphone.py

# Создайте смартфон и проверьте его методы
# TODO: Создайте объект Smartphone с брендом "Apple" и моделью "iPhone 13"
my_phone = None

# TODO: Вызовите метод power_on() смартфона и выведите результат

# TODO: Вызовите метод connect() смартфона и выведите результат

# TODO: Вызовите метод make_call() смартфона с параметром "123-456-7890" и выведите результат
quiz iconПроверьте себя

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

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Python