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. 练习题能独立做出来,这一节你就完全掌握啦!

=分割线=

相关推荐
专业程序开发源3 分钟前
springboot外卖系统94294-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
ss27310 分钟前
AI全栈实战 | 3.3-01 Python OOP:__init__ 真的是构造函数吗,元类怎么让 Django Model 变魔法
开发语言·python·django
Moshow郑锴2 小时前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
weixin_307779135 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天8 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel8 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
Wang's Blog9 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_9620715710 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
\光辉岁月/11 小时前
5.java-数组
java·开发语言
Java后端的Ai之路11 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数