Mistral本地部署实战:从模型选型到API接入全指南
2026/10/1 18:37:31
继承是面向对象(OOP)的三大特性(封装、继承、多态)之一,核心价值是:
单继承指子类仅继承一个父类,是 Python 中最安全、最易维护的继承方式,几乎覆盖 90% 以上的继承场景。
python
# 定义父类(基类) class Animal: # 父类属性 species = "动物" # 父类初始化方法 def __init__(self, name, age): self.name = name # 实例属性:名字 self.age = age # 实例属性:年龄 # 父类通用方法 def eat(self): print(f"{self.name}正在进食") def sleep(self): print(f"{self.name}正在睡觉") # 定义子类(派生类),继承Animal class Cat(Animal): # 子类新增属性 species = "猫科动物" # 子类重写父类方法(定制化逻辑) def eat(self): # 先调用父类的eat方法(保留通用逻辑) super().eat() # 新增子类专属逻辑 print(f"{self.name}喜欢吃小鱼干") # 子类新增方法 def catch_mouse(self): print(f"{self.name}正在抓老鼠") # 测试单继承 if __name__ == "__main__": # 创建子类实例 tom = Cat("汤姆", 3) # 访问父类继承的属性/方法 print(tom.species) # 输出:猫科动物(子类重写了父类属性) print(tom.name) # 输出:汤姆(继承父类的实例属性) tom.sleep() # 输出:汤姆正在睡觉(继承父类方法) # 调用重写后的方法 tom.eat() # 输出: # 汤姆正在进食 # 汤姆喜欢吃小鱼干 # 调用子类新增方法 tom.catch_mouse() # 输出:汤姆正在抓老鼠super()函数:核心作用是按继承顺序调用父类的方法,即使子类重写了父类方法,也能保留父类的通用逻辑;object(Python 所有类的默认基类);super()可调用被覆盖的父类方法。多继承指子类同时继承多个父类,可以复用多个类的功能,但容易出现「方法冲突」「菱形继承」等问题,需严格遵循 MRO 规则。
python
# 父类1:会跑的能力 class Runnable: def run(self): print(f"{self.name}正在快速奔跑") # 父类2:会游泳的能力 class Swimmable: def swim(self): print(f"{self.name}正在游泳") # 父类3:基础动物类(与单继承示例一致) class Animal: def __init__(self, name): self.name = name # 子类:继承Animal + Runnable + Swimmable(多继承) class Dog(Animal, Runnable, Swimmable): # 子类新增专属方法 def bark(self): print(f"{self.name}正在汪汪叫") # 测试多继承 if __name__ == "__main__": wangcai = Dog("旺财") # 调用不同父类的方法 wangcai.run() # 输出:旺财正在快速奔跑(继承Runnable) wangcai.swim() # 输出:旺财正在游泳(继承Swimmable) wangcai.bark() # 输出:旺财正在汪汪叫(子类自身方法)多继承的核心是MRO(Method Resolution Order),即子类查找方法 / 属性的优先级顺序:
类名.__mro__或类名.mro();object。示例:MRO 与方法冲突
python
# 两个父类有同名方法 class A: def show(self): print("我是A类的show方法") class B: def show(self): print("我是B类的show方法") # 子类继承A和B,继承顺序决定优先调用哪个父类的方法 class C(A, B): pass # 测试 c = C() c.show() # 输出:我是A类的show方法(因为继承顺序是A在前) print(C.__mro__) # 输出:(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)当多个父类最终继承自同一个基类时,会形成 “菱形” 结构,super()结合 MRO 可避免基类方法被重复调用:
python
# 顶层基类 class Top: def __init__(self): print("Top初始化") # 父类1:继承Top class Left(Top): def __init__(self): super().__init__() # 按MRO调用下一个类的__init__ print("Left初始化") # 父类2:继承Top class Right(Top): def __init__(self): super().__init__() # 按MRO调用下一个类的__init__ print("Right初始化") # 子类:继承Left和Right(菱形结构) class Bottom(Left, Right): def __init__(self): super().__init__() # 按MRO调用Left的__init__ print("Bottom初始化") # 测试:Top仅被调用1次(MRO的作用) b = Bottom() # 输出顺序: # Top初始化 # Right初始化 # Left初始化 # Bottom初始化 print(Bottom.__mro__) # Bottom → Left → Right → Top → object| 维度 | 单继承 | 多继承 |
|---|---|---|
| 复杂度 | 低,逻辑清晰,易维护 | 高,易出现方法冲突、逻辑混乱 |
| 适用场景 | 绝大多数业务场景(推荐) | 特殊场景(如 Mixin 工具类) |
| 风险 | 几乎无风险 | 需关注 MRO、方法冲突 |
| 典型用法 | 业务类层级拓展(如 Animal→Cat) | 功能混合(如 Runnable+Swimmable→Dog) |
RunnableMixin);super()遵循 MRO,避免硬编码父类名导致的逻辑错误;super()调用父类方法,逻辑清晰、易维护;