Python 3.10中如何让子类重写run时自动执行计时启停逻辑
可行,这是实现方案
完全可以做到不用子类手动调用计时启停逻辑,核心思路是把父类的run()从抽象方法改成具体实现,同时定义一个新的抽象方法让子类实现业务逻辑,父类的run()负责包裹计时逻辑并调用子类的业务方法。
具体实现步骤:
- 父类中把原来的抽象
run()重命名为_run()(或其他自定义名称),保留抽象方法定义,让子类必须实现该方法编写业务逻辑。 - 父类新增具体的
run()方法,在其中完成timer.start()、调用子类_run()、timer.stop()的完整逻辑。
代码示例:
from abc import ABC, abstractmethod class Parent(ABC): def __init__(self, timer): self.t = timer # 子类需实现的业务逻辑抽象方法 @abstractmethod def _run(self): pass # 父类提供的带计时包裹的入口方法 def run(self): self.t.start() try: # 调用子类的业务逻辑 self._run() finally: # 确保异常场景下也能停止计时 self.t.stop() # 子类实现示例 class Child1(Parent): def _run(self): # 仅编写Child1的业务逻辑,无需关心计时 print("Child1执行业务逻辑") class Child2(Parent): def _run(self): # Child2的业务逻辑 print("Child2执行业务逻辑")
使用方式:
# 示例Timer类(可替换为实际计时实现) class Timer: def start(self): print("计时开始") def stop(self): print("计时结束") t = Timer() child1 = Child1(t) child1.run() # 自动执行:计时开始→业务逻辑→计时结束
方案优势:
- 子类只需专注实现
_run()的业务逻辑,完全无需手动调用计时启停或父类方法。 - 父类
run()作为统一入口,所有子类继承后自动获得计时能力,无需额外代码侵入。
内容的提问来源于stack exchange,提问作者Mew
相关产品推荐
相关产品推荐

