Python使用类结合time、datetime模块时循环计时器未重置问题
问题原因
你定义的start和dateStart是类属性,而非实例属性,这是导致计时器无法重置的核心原因。
- 类属性直接定义在类代码块内、类方法外,Python在首次解析类定义时就会执行对应的赋值逻辑,整个程序运行周期内只会计算一次,所有类实例共享同一个类属性的值,不会随新实例创建重新赋值。
- 你提到的其余属性可以正常重置,大概率是这些属性定义在构造方法
__init__中:__init__是类的实例构造方法,每次创建新的类实例时都会执行一次,内部赋值的变量属于实例私有属性,不同实例之间互不影响。
修复方案
将时间初始化逻辑移到__init__构造方法内即可,修改后代码如下:
import time import datetime class Test: def __init__(self): # 每次实例化时重新计算当前时间,作为当前实例的独立计时起点 self.start = time.time() self.dateStart = datetime.datetime.now() def end(self): time.sleep(10) print(time.time() - self.start) print(datetime.datetime.now() - self.dateStart) while True: test = Test() test.end()
修改后每次循环创建Test实例时,都会重新获取当前时间作为计时起点,输出的耗时会固定为10秒左右,不会再累积。
内容的提问来源于stack exchange,提问作者IgnacioDLF
相关产品推荐
相关产品推荐

