广州市车管所网站建设asp.net做学校网站首页
2026/6/20 9:28:25 网站建设 项目流程
广州市车管所网站建设,asp.net做学校网站首页,发布信息免费的网站,上海工商网上公示一、继承的核心本质继承是面向对象#xff08;OOP#xff09;的三大特性#xff08;封装、继承、多态#xff09;之一#xff0c;核心价值是#xff1a;代码复用#xff1a;子类无需重复编写父类已有的属性和方法#xff1b;功能拓展#xff1a;子类可在父类基础上新增…一、继承的核心本质继承是面向对象OOP的三大特性封装、继承、多态之一核心价值是代码复用子类无需重复编写父类已有的属性和方法功能拓展子类可在父类基础上新增功能或重写父类方法适配自身需求层级管理通过类的层级关系梳理业务逻辑如「动物」→「哺乳动物」→「猫」。二、单继承推荐优先使用单继承指子类仅继承一个父类是 Python 中最安全、最易维护的继承方式几乎覆盖 90% 以上的继承场景。1. 基础语法与示例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() # 输出汤姆正在抓老鼠2. 关键知识点super()函数核心作用是按继承顺序调用父类的方法即使子类重写了父类方法也能保留父类的通用逻辑查找顺序子类 → 父类 → 父类的父类 → ... →objectPython 所有类的默认基类重写规则子类方法名与父类一致时会覆盖父类方法通过super()可调用被覆盖的父类方法。三、多继承谨慎使用多继承指子类同时继承多个父类可以复用多个类的功能但容易出现「方法冲突」「菱形继承」等问题需严格遵循 MRO 规则。1. 基础语法与示例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() # 输出旺财正在汪汪叫子类自身方法2. 核心问题方法解析顺序MRO多继承的核心是MROMethod Resolution Order即子类查找方法 / 属性的优先级顺序Python3 使用「C3 算法」计算 MRO保证顺序唯一且避免重复调用查看 MRO 的方式类名.__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)3. 经典坑点菱形继承当多个父类最终继承自同一个基类时会形成 “菱形” 结构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四、单继承 vs 多继承核心对比维度单继承多继承复杂度低逻辑清晰易维护高易出现方法冲突、逻辑混乱适用场景绝大多数业务场景推荐特殊场景如 Mixin 工具类风险几乎无风险需关注 MRO、方法冲突典型用法业务类层级拓展如 Animal→Cat功能混合如 RunnableSwimmable→Dog五、实战最佳实践优先用单继承90% 以上的场景用单继承即可满足需求逻辑简单、维护成本低多继承只用于 Mixin 类Mixin 类是 “功能片段类”如 Runnable、Swimmable仅提供方法不单独实例化命名以 “Mixin” 结尾如RunnableMixin避免同名方法多继承时尽量保证父类之间无同名方法减少冲突用 super () 而非直接调用父类super()遵循 MRO避免硬编码父类名导致的逻辑错误组合替代继承如果多继承逻辑复杂可通过 “组合”将其他类作为实例属性替代更灵活。总结单继承是 Python 继承的主流方式子类仅继承一个父类通过super()调用父类方法逻辑清晰、易维护多继承允许子类继承多个父类核心是 MRO方法解析顺序需注意方法冲突和菱形继承问题仅在 Mixin 等特殊场景使用实际开发中优先选择单继承多继承需严格遵循 MRO 规则或用 “组合” 替代以降低复杂度。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询