【发布时间】:2021-03-13 06:29:11
【问题描述】:
如果我执行以下操作:
@dataclass
class Test:
hi: Optional[str] = field(
default_factory=lambda: str(uuid.uuid1()))
@dataclass
class Test2:
hi: Optional[str] = str(uuid.uuid1())
if __name__ == "__main__":
a = Test() # Test(hi='115a865c-33be-11eb-94a1-34c93db23648')
b = Test() # Test(hi='115a865d-33be-11eb-8c6f-34c93db23648')
c = Test2() # Test2(hi='10e44300-33be-11eb-85eb-34c93db23648')
d = Test2() # Test2(hi='10e44300-33be-11eb-85eb-34c93db23648')
为什么Test 会为每个实例返回不同的uuid,而Test2 每次都会返回相同的?
另外,为什么需要default factory 而不是default?
【问题讨论】:
-
这能回答你的问题吗? Passing default list argument to dataclasses
-
@TomWojcik 不,我看到了,但不明白它如何回答我的用例 TBH