Den*_*Den 1 python python-3.x python-dataclasses
我生成了两个不同的 python 实例,dataclass其中包含一个嵌套的dataclass. 当我更新嵌套dataclass在一个实例中(而不是在另一个实例中)中的值时,相同的数据被放置dataclass在两个实例中的嵌套中。这不是我所期望的。
from dataclasses import dataclass
@dataclass
class sub1:
q: int = 10
r: str = "qrst"
@dataclass
class A:
a: int = 1
s1: sub1 = sub1()
if __name__ == '__main__':
a = A()
aa = A()
aa.a = 9
aa.s1.r = "92"
print("a:", repr(a))
print("aa:", repr(aa))
''' Produces --
a: A(a=1, s1=sub1(q=10, r='92'))
aa: A(a=9, s1=sub1(q=10, r='92'))
'''
Run Code Online (Sandbox Code Playgroud)
我希望嵌套dataclass只在指定的实例 ( aa) 中更新,而嵌套dataclass在另一个实例 ( a) 中保持不变。
我做错了什么,或者是dataclass错误的工具?
我拒绝将感谢视为绒毛。感谢所有回答的人,感谢试图删除它的人。
您当前所做的是为该字段提供默认值。由于该值是一个可变对象,对该对象的更改将对数据类的所有实例可见。
您应该做的是提供一个默认工厂,sub1为每个新A实例生成实例:
from dataclasses import field
@dataclass
class A:
a: int = 1
s1: sub1 = field(default_factory=sub1)
a = A()
aa = A()
aa.a = 9
aa.s1.r = "92"
print("a:", repr(a)) # a: A(a=1, s1=sub1(q=10, r='qrst'))
print("aa:", repr(aa)) # aa: A(a=9, s1=sub1(q=10, r='92'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1892 次 |
| 最近记录: |