You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python dataclass实例化时变量值固定不更新如何解决

问题原因

当前代码的ts=time.time()写法存在两个问题,导致时间戳固定:

  1. 类体中直接赋值的代码,会在Test类首次被解释器加载定义时仅执行一次,计算出的时间戳会作为类属性固定,不会在实例化阶段重新计算
  2. 未添加类型标注的变量在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:18:21