继承通过关系声明和运行时查找实现代码复用,子类可直接调用父类属性方法;super()支持扩展初始化与增强式重写;abc和mixin提供接口约束与横向能力复用。

继承带来的代码复用,核心是让子类自动获得父类已定义的属性和方法,避免重复编写相同逻辑。它不是靠复制粘贴,而是通过类之间的“关系声明”和运行时查找机制来实现的。
子类直接使用父类的属性和方法
只要父类中定义了公共属性(如 self.name)或实例方法(如 def speak(self):),子类在不重写的情况下,创建实例后就能直接调用:
- 子类实例可访问父类 __init__ 初始化的属性(例如 name、life);
- 子类实例能调用父类定义的方法(例如 attack()、move()),无需额外定义;
- 这种复用是动态的——修改父类方法,所有未重写的子类行为同步更新。
通过 super() 复用父类初始化逻辑
子类常需扩展构造过程(比如新增 age 或 breed),但又不能丢掉父类对 name 等基础属性的设置。这时用 super().__init__(...) 显式调用父类构造函数:
- 确保父类的初始化代码被执行,基础状态被正确建立;
- 避免手动重复写 self.name = name 这类代码,减少出错可能;
- 在多继承中,super() 还会按 MRO 顺序协调多个父类的初始化,保持一致性。
重写 + super() 实现“增强式复用”
当子类需要微调父类行为(比如在打招呼前加个前缀),可以重写方法,同时用 super() 调回父类原始逻辑:
- 例如重写 greet() 时,先执行 super().greet() 输出父类内容,再补充子类特有信息;
- 这样既保留了原有功能,又实现了定制,比从头重写更安全、更省力;
- 相比硬编码调用 Parent.greet(self),super() 更适应继承链变化,尤其在多重继承中更可靠。
抽象基类与 Mixin 提供结构化复用
除了常规继承,Python 还支持更高层次的复用模式:
- 抽象基类(ABC) 定义统一接口(如 speak()),强制子类实现,保证调用方代码稳定复用;
- Mixin 类 不单独使用,只提供某类通用能力(如 JsonSerializable、Loggable),通过多继承“混入”到业务类中,横向复用功能模块;
- 它们不追求“is-a”语义,而是聚焦“has-a 能力”,让复用更灵活、职责更清晰。











