多重继承
本课属于 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 会从左到右检查父类。
挑战
中等在这个挑战中,你将实现一个多文件类系统,用智能手机演示多重继承。每个类都放在单独的文件中,以便更好地组织代码。
你需要编辑以下文件:
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() 方法并打印结果这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Python 在线编译器