gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:42:14 26 4
gpt4 key购买 nike

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

@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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com