Python dataclass实例化时变量值固定不更新如何解决
问题原因
当前代码的ts=time.time()写法存在两个问题,导致时间戳固定:
- 类体中直接赋值的代码,会在
Test类首次被解释器加载定义时仅执行一次,计算出的时间戳会作为类属性固定,不会在实例化阶段重新计算 - 未添加类型标注的变量在dataclass规则中不会被识别为实例字段,所有
Test实例访问ts时拿到的都是同一个类属性值,不会随实例化更新。
实现方法
要让实例化时自动刷新时间取值,需要使用field()的default_factory参数配置动态默认值:default_factory接收一个无参可调用对象,每次创建新实例时,dataclass会自动调用该对象生成全新的默认值。
修正后可正常运行的代码:
import time from dataclasses import dataclass, field @dataclass class Test: ts: float = field(default_factory=time.time) while 1: m = Test() print(m.ts) time.sleep(2)
补充说明:
time.time本身就是不需要传参的可调用对象,可以直接传给default_factory;如果需要生成带自定义逻辑的动态默认值,也可以传入lambda表达式或者自定义的无参函数。
运行上述代码后,每次实例化都会重新执行time.time()获取当前时间,打印的时间戳会按2秒间隔正常递增。
内容的提问来源于stack exchange,提问作者weasel
相关产品推荐
相关产品推荐

