python - 实例化类时在数据类内部创建时间戳

标签 python class datetime python-dataclasses

我正在使用数据类,我想在每次创建该类的实例时创建一个时间戳,如下所示:

@dataclass
class test:
    timestamp: datetime = datetime.utcnow()

test1 = test()

但是,这样做会产生一个时间戳,截至我为原始类对象运行代码时。也就是说,新实例都具有相同的时间戳。

下面的方法可以满足我的要求,但我不明白为什么。我认为上述方法也应该有效,因为没有创建该类的实例。为什么我必须用那种实地方法来写它?

@dataclass
class test:
timestamp: datetime = field(default_factory=datetime.utcnow)

test1 = test()
test1.timestamp

最佳答案

在第一种情况下,datetime.utcnow() 在定义类时进行计算。这有效地为该字段提供了默认值。当您创建该类的一个对象时,不会再次执行该评估 - 因此您只剩下一个与您创建的该类的所有实例共享的单个值。

另一方面,default_factory 使用一个可调用对象,每当创建该类的新实例时调用该调用对象 - 调用的结果用于填充该字段。因此,当您创建 test 类的对象时,datetime.utcnow() 会再次运行并且该实例中会出现更新的时间戳。

阅读docs了解更多信息。

关于python - 实例化类时在数据类内部创建时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67762648/

相关文章:

python - 我的 Python 应用程序需要多长时间才能运行?

java - 使用两个接口(interface)声明变量

python - Tornado 异步调用一个函数

winapi - 如何在 Win32 中获得特定的 TIME_ZONE_INFORMATION 结构?

python - Django 立即测试模拟日期时间

python - 使用 Python 解析北欧格式日期(首先是 DMY,然后是 YMD)的最佳方法

python - 使用切片/索引在矩阵内切换 numpy 向量

r - R中函数的运算符重载 - 奇怪的行为

PHP 从 yyyy-mm-ddThh :mm:ss string 创建日期对象

javascript - 标记更新位置