Menu
CoddyTech

多重继承

本课属于 Coddy Python 学习旅程的“面向对象编程”单元。第 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)  # 调用 Animal 的 __init__
        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.py 导入 Smartphone 类

# 创建一部智能手机并测试它的方法
# TODO: 创建一个品牌为 "Apple"、型号为 "iPhone 13" 的 Smartphone 对象
my_phone = None

# TODO: 调用智能手机的 power_on() 方法并打印结果

# TODO: 调用智能手机的 connect() 方法并打印结果

# TODO: 使用参数 "123-456-7890" 调用智能手机的 make_call() 方法并打印结果
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Python 在线编译器