python学习笔记 | 11.3、面向对象高级编程-多重继承

一、先搞懂:我们为什么需要「多重继承」?

1. 正常的单一继承(只能继承一个爸爸)

复制代码
# 动物
class Animal:
    pass

# 哺乳动物(继承动物)
class Mammal(Animal):
    pass

# 狗(继承哺乳动物)
class Dog(Mammal):
    pass

问题:狗不仅是哺乳动物,还会跑;蝙蝠不仅是哺乳动物,还会飞如果只能继承一个类,就没法同时拥有「物种属性」+「技能属性」!

2. 复杂场景:动物有 2 种分类方式

  1. 按物种分:哺乳动物、鸟类
  2. 按技能分:会跑、会飞

如果用单一继承,类会爆炸式变多!

→ 解决方案:多重继承(一个子类可以继承多个父类)

二、核心知识点(必背)

1. 什么是多重继承?

一个类同时继承 2 个或更多父类,拥有所有父类的属性和方法。

语法:

复制代码
class 子类(父类1, 父类2, 父类3):
    pass

2. 什么是 MixIn?(超级重要!)

MixIn = "混入功能"

  • 不是主继承关系(不是 "是什么")
  • 只是额外增加功能("能做什么")

规则:

  1. 主线用单一继承(比如 Dog → Mammal → Animal)
  2. 功能用 MixIn 多重继承 加进去
  3. 命名习惯:功能名MixIn

作用:不用写复杂继承链,随便组合功能!

三、通俗实例(一步一步写代码)

第一步:定义主线类(物种)

复制代码
# 顶层父类:动物
class Animal(object):
    pass

# 哺乳动物
class Mammal(Animal):
    pass

# 鸟类
class Bird(Animal):
    pass

第二步:定义功能 MixIn(技能)

复制代码
# 会跑的功能
class RunnableMixIn(object):
    def run(self):
        print("我会跑!")

# 会飞的功能
class FlyableMixIn(object):
    def fly(self):
        print("我会飞!")

第三步:多重继承组合(最终动物类)

复制代码
# 狗:是哺乳动物 + 会跑
class Dog(Mammal, RunnableMixIn):
    pass

# 蝙蝠:是哺乳动物 + 会飞
class Bat(Mammal, FlyableMixIn):
    pass

# 鸵鸟:是鸟类 + 会跑
class Ostrich(Bird, RunnableMixIn):
    pass

# 鹦鹉:是鸟类 + 会飞
class Parrot(Bird, FlyableMixIn):
    pass

第四步:测试使用

复制代码
# 创建一只狗
dog = Dog()
dog.run()  # 输出:我会跑!

# 创建一只蝙蝠
bat = Bat()
bat.fly()  # 输出:我会飞!

真实工程例子(Python 官方用法)

复制代码
# TCP服务 + 多线程功能
class MyServer(TCPServer, ThreadingMixIn):
    pass

四、超清晰总结(背会这 3 句)

  1. 多重继承:一个类继承多个父类,获得所有功能
  2. MixIn :专门用来加功能的类,不是主继承关系
  3. 设计思路:主线单一继承 + 功能 MixIn 组合

五、练习题(带答案)

练习题 1:基础语法题

定义:

  • 一个 Person 类
  • 一个 Student 类(继承 Person)
  • 一个 StudyMixIn 类(有 study() 方法,打印 "我在学习")

让 Student 同时继承 Person 和 StudyMixIn,并调用 study()。

复制代码
#代码
class Person:
    pass

class Student(Person):
    pass

class StudyMixIn:
    def study(self):
        print('我在学习')

class StudentMixIn(Person,StudyMixIn):
    pass
    #❌️stud = study() #study()是方法,必须通过对象调用,不能直接写在类里赋值。

#创建一个学生
s=StudentMixIn()
s.study()

练习题 2:功能组合题

定义:

  1. Car(汽车主类)
  2. ElectricMixIn(充电功能:charge())
  3. AutoDriveMixIn(自动驾驶功能:auto_drive())

创建一个特斯拉类 Tesla,继承 Car + 两个功能,并测试两个方法。

复制代码
#代码
class Car:
    pass
class ElectricMixIn:
    def charge(self):
        print('充电功能')

class AutoDriveMixIn:
    def auto_drive(self):
        print('自动驾驶功能')
class TeslaMixIn(Car, ElectricMixIn,AutoDriveMixIn):
    pass

tsla = TeslaMixIn()
tsla.charge()
tsla.auto_drive()

练习题 3:理解判断题

判断对错:

  1. Python 支持多重继承 ✅
  2. MixIn 是用来做主继承关系的(比如 "狗是哺乳动物") ❌
  3. 一个类可以同时继承 3 个 MixIn ✅
  4. Java 也可以像 Python 一样随便用 MixIn ❌

答案:

  1. 对
  2. 错(MixIn 是加功能,不是主关系)
  3. 对
  4. 错(Java 只支持单继承,不能用 MixIn)

总结

  1. 多重继承 = 一个子类继承多个父类
  2. MixIn = 给类 "混入" 额外功能,命名带 MixIn
  3. 最佳用法:主线单继承 + 功能 MixIn 组合
  4. 练习题能独立做出来,这一节你就完全掌握啦!

=分割线=

相关推荐
aloha_78930 分钟前
Java 基础、集合、异常与 JUnit 5 速查
java·junit·sqlserver
知守观1 小时前
设计模式实战:从真实老项目中看标准模板方法与工厂的落地
java·spring·设计模式
2601_962885721 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
独隅1 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
SL_staff2 小时前
JVS私有化文档系统上线避坑指南:5大运维与业务协同断点及检测加固实践
java·开源·全栈
下一站春风里2 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
FinelyYang3 小时前
考试系统简答题 AI 阅卷:覆盖度驱动、异步评分与人机协同落地实践
java·大数据·人工智能
天外飞雨道沧桑3 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl3 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言