07子类继承父类后,如何重写父类的方法?
文章目录
问题: 子类继承父类后,如何重写父类的方法?
👇 点击展开/折叠 面试背诵模板(建议先背这个)
重写的两种模式:完全替换与扩展增强
- 完全替换:子类方法不调用父类方法,所有逻辑重新定义,适用于父类行为完全不适用。
- 扩展增强:子类方法先调用
super().方法()获取父类结果,再追加额外逻辑,遵循开闭原则。
1 | class Animal: |
重写 __init__ 的强制约束与执行顺序
子类重写 __init__ 时,父类的实例属性不会被自动继承,必须显式调用 super().__init__() 触发父类初始化。调用位置通常放在子类初始化逻辑的最前面,确保父类属性先建立,子类属性后附加,避免覆盖冲突。
1 | class Parent: |
参数列表修改的多态性风险
Python 语法允许子类重写方法时增减参数(如 def speak(self, loud=False)),但会导致多态失效。当通过父类引用调用时(实际传入子类实例),参数不匹配会抛出异常。日常开发中,只要涉及多态场景(如列表 [Dog(), Cat()] 循环调用),重写方法应严格保持参数类型和数量与父类一致。
强制子类必须重写的方法(抽象方法)
若父类方法无合理默认实现,可使用 @abstractmethod 强制子类重写,否则子类无法实例化。这属于“契约式设计”,将“做什么”与“怎么做”分离。
1 | from abc import ABC, abstractmethod |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!