Python子类重写继承方法时如何追加逻辑并复用父类功能
解决方案
子类重写父类方法时,不需要重复编写父类已实现的公共逻辑,通过super()关键字调用父类对应方法即可复用原有功能,再追加子类自定义代码即可。
写法1:直接通过super()调用父类方法
在子类重写的__call__方法中,按需调用父类的__call__执行播放音效的逻辑,不需要重复写print("play")代码:
class Button: def __call__(self): print("play") # 父类统一实现的点击音效逻辑 class ChildButton(Button): def __call__(self): # 调用父类__call__,自动执行音效播放 super().__call__() # 追加子类自定义点击逻辑 print("执行子类专属逻辑:跳转活动页、提交表单等")
调用测试效果:
if __name__ == "__main__": btn = ChildButton() btn()
输出结果:
play 执行子类专属逻辑:跳转活动页、提交表单等
如果需要自定义逻辑在音效播放前执行,只需要把super().__call__()的调用位置挪到自定义代码之后即可,执行顺序可以自由调整。
写法2:模板方法模式(更适合多子类扩展场景)
如果后续要实现大量不同功能的按钮子类,可以在父类把固定流程封装好,子类只需要实现可变的自定义逻辑,避免每个子类重写__call__时忘记调用父类方法:
class Button: def __call__(self): # 所有按钮通用的固定逻辑:点击播放音效 print("play") # 触发子类实现的自定义点击逻辑 self.click_handler() def click_handler(self): # 父类默认空实现,子类按需重写 pass class ChildButton(Button): def click_handler(self): # 只需要编写子类专属逻辑,不需要关心音效播放相关代码 print("执行子类专属逻辑:跳转活动页、提交表单等")
这种写法下,所有子类的公共逻辑都由父类统一管控,不会出现公共逻辑丢失的问题,可维护性更强。
内容的提问来源于stack exchange,提问作者Justin Case
相关产品推荐
相关产品推荐

