📖 知识点
多继承语法
class 子类(父类1, 父类2, 父类3):
pass
子类同时拥有父类 1、父类 2 里面所有非私有属性、方法
查找规则:MRO 方法解析顺序,从左向右查找当多个父类有同名方法时,优先取左边第一个找到的方法
基础示例
# 父类1
class Runner:
def run(self):
print("可以跑步")
# 父类2
class Reader:
def read(self):
print("可以读书")
# 多继承,同时继承Runner 和 Reader
class Student(Runner, Reader):
pass
stu = Student()
stu.run()
stu.read()
输出:
可以跑步
可以读书
同名方法冲突演示
class A:
def skill(self):
print("A的招式")
class B:
def skill(self):
print("B的招式")
# 先继承A,再继承B,同名优先左边A
class C(A,B):
pass
obj = C()
obj.skill() # A的招式
⚠️ 注意事项
多继承能力强大,但容易带来代码复杂度提升,项目中谨慎使用
继承顺序
class C(A,B),查找顺序:C → A → B想要查看 MRO 查找顺序:
类名.__mro__
⚔️ Kata 实战任务
任务需求:
编写两个父类
Study类:方法study(),打印正在学习PythonSport类:方法sport(),打印正在锻炼身体
创建子类
TeenStudent,同时继承 Study 和 Sport实例化对象 stu = TeenStudent ()
调用 study () 和 sport ()
参考代码
# 父类1
class Study:
def study(self):
print("正在学习Python")
# 父类2
class Sport:
def sport(self):
print("正在锻炼身体")
# 多继承,同时继承两个父类
class TeenStudent(Study, Sport):
pass
stu = TeenStudent()
stu.study()
stu.sport()
运行输出:
正在学习Python
正在锻炼身体
🧠 思考题
如果 Study 和 Sport 都有同名方法
show(),子类调用 show (),会执行哪一个父类的方法?多继承相比单继承,优点和隐患分别是什么?