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 同时继承 PersonStudyMixIn,并调用 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. 错(MixIn 是加功能,不是主关系)
  2. 错(Java 只支持单继承,不能用 MixIn)

总结

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

=分割线=

相关推荐
basketball6161 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
春生野草2 小时前
反射、Tomcat执行
java·开发语言
_日拱一卒2 小时前
LeetCode:207课程表
java·数据结构·算法·leetcode·职场和发展
飞翔中文网2 小时前
Java学习笔记之抽象类与接口(设计思想)
java·笔记·学习
雪的季节2 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
qcx233 小时前
【系统学AI】09 Multi-Agent架构(2026版):从学术理论到工业级实践
java·人工智能·架构·multi-agent·claude agent
半旧夜夏3 小时前
【保姆级】微服务组件环境搭建(Docker Compose版)
java·linux·spring cloud·微服务·云原生·容器
代龙涛3 小时前
WordPress page.php 页面模板与自定义模板使用方法
android·开发语言·php
bigfootyazi3 小时前
python爬虫-基本库-urllib库(常用速查)
开发语言·爬虫·python