Menu
Coddy logo textTech

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

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

challenge icon

Задание

Средне

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

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

  • device.py — Реализуйте базовый класс Device
  • internet.py — Реализуйте базовый класс Internet
  • smartphone.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"
quiz iconПроверьте себя

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

Все уроки раздела Object Oriented Programming