【Python网络编程】03_三大特性之继承

Python 继承知识体系思维导图


详细知识点与代码整理

1. 继承的基本概念与语法

继承是面向对象编程的核心特性之一,它允许我们基于一个已存在的类来创建新类。

  • 定义:一个类(子类)获取另一个类(父类)的公有属性和方法。

  • 派生:从一个已有的类(父类)产生一个新的类(子类)的过程。

  • 术语

    • 父类/基类:被继承的类。
    • 子类/派生类:继承别人的类。
  • 语法class 子类名(父类名):

  • 特性 :Python 中所有类默认都继承自 object 类。

2. 单继承与多层继承

单继承是最简单的继承形式。继承具有传递性,如果 A 继承 B,B 继承 C,那么 A 也继承 C。

ruby 复制代码
# 定义一个人类 (父类)
class Person(object):
    def speak(self):
        print("我拥有说话的能力")

    def walk(self):
        print("我拥有走路的能力")

# 定义学生类继承于人类 (子类)
class Student(Person):
    pass

# 定义大学生类继承于学生类 (多层继承)
class CollegeStudent(Student):
    pass

# 创建大学生对象
college_stu = CollegeStudent()
# 大学生类虽然没有定义speak和walk,但因为继承关系,依然可以使用
college_stu.speak()  # 输出: 我拥有说话的能力
college_stu.walk()   # 输出: 我拥有走路的能力

3. 多继承

Python 支持一个子类同时继承多个父类。

python 复制代码
class Car(object):
    def __init__(self):
        self.name = "汽车"
        self.wheel = 4

    def run(self):
        print("我拥有行驶的能力")

class OilCar(Car):
    """汽油车"""
    def power(self):
        print("我拥有燃油动力")

class ElectricCar(Car):
    """电动车"""
    def power(self):
        print("我拥有电池动力")

# 混动车同时继承汽油车和电动车
class HybridCar(OilCar, ElectricCar):
    pass

# 创建混合车对象
hybrid_car = HybridCar()
hybrid_car.oil_power()      # 调用 OilCar 的方法
hybrid_car.electric_power() # 调用 ElectricCar 的方法
hybrid_car.run()            # 调用 Car 的方法
print(hybrid_car.name)      # 访问 Car 的属性

4. 方法重写与 super() 函数

子类可以重新定义父类的方法,以提供个性化的实现,这称为方法重写。当子类调用该方法时,会执行子类中重写的版本。

  • super() 函数 :用于调用父类的方法。在多继承中,它会根据 MRO 顺序调用下一个类的方法,比直接使用 父类名.方法() 更灵活。
python 复制代码
class HybridCar(OilCar, ElectricCar):
    def __init__(self, battery):
        # super().__init__() 会根据MRO顺序调用父类的__init__
        # 在这里,它会跳过OilCar和ElectricCar,直接调用Car的__init__
        super().__init__() 
        self.battery = battery

    def power(self):
        # 重写power方法,实现混合动力
        print(f"我是{self.name}, 我有{self.wheel}个轮子")
        # 可以分别调用不同父类的power方法
        OilCar.power(self)
        ElectricCar.power(self)
        print("我拥有燃油和电池的混合动力")

hybrid_car = HybridCar("大容量电池")
hybrid_car.power()

5. MRO (Method Resolution Order)

MRO,即方法解析顺序,决定了在多继承中,当调用一个方法时,Python 应该按照什么顺序去查找。

  • Python 使用 C3 线性化算法 来计算 MRO。
  • 可以通过 类名.__mro__类名.mro() 来查看一个类的 MRO 列表。
  • 查找顺序遵循"从左到右,深度优先"的原则,但 C3 算法会保证每个类只出现一次,并且子类总是在父类之前被查找。
python 复制代码
class A(object):
    def __init__(self):
        print("A")

class B(A):
    def __init__(self):
        print("B")
        super().__init__()

class C(A):
    def __init__(self):
        print("C")
        super().__init__()

class D(B, C):
    def __init__(self):
        print("D")
        super().__init__()

# 创建 D 的实例,观察执行顺序
d = D()
# 输出:
# D
# B
# C
# A

# 查看 D 类的 MRO
print(D.__mro__)
# 输出: (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
相关推荐
临沂GEO5 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白6 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲7 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)8 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机9 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor6929 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy10 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽11 小时前
真实即粗糙,光滑是伪造
人工智能·python
一次旅行11 小时前
Attention机制从数学到工程:拆解缩放点积+多头注意力|附可运行PyTorch实现与踩坑指南
人工智能·pytorch·python
泡干脆面就番茄11 小时前
NumPy 科学计算完全指南:从数组创建到广播机制
python·numpy