铸器篇-Day74 多继承入门

0 次阅读 2026-10-20 09:16

📖 知识点

多继承语法

 

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的招式

 

⚠️ 注意事项

  1. 多继承能力强大,但容易带来代码复杂度提升,项目中谨慎使用

  2. 继承顺序 class C(A,B),查找顺序:C → A → B

  3. 想要查看 MRO 查找顺序:类名.__mro__

⚔️ Kata 实战任务

任务需求:

  1. 编写两个父类

    • Study 类:方法 study(),打印正在学习Python

    • Sport 类:方法 sport(),打印正在锻炼身体

  2. 创建子类 TeenStudent,同时继承 Study 和 Sport

  3. 实例化对象 stu = TeenStudent ()

  4. 调用 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
正在锻炼身体

 

🧠 思考题

  1. 如果 Study 和 Sport 都有同名方法show(),子类调用 show (),会执行哪一个父类的方法?

  2. 多继承相比单继承,优点和隐患分别是什么?