下面是一个发生情况的示例:
@dataclass
class D:
prop1: str
prop2: dict = field(default_factory=lambda: defaultdict(set))
d = D("spam")
print(d)
# D(prop1='spam', prop2=Field(name=None,type=None,default=<dataclasses._MISSING_TYPE object at 0x10274c650>,default_factory=<function D.<lambda> at 0x103ad3a70>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=None))
正如您所看到的,prop2
不是使用default_factory
的默认值进行初始化的,它仍然是一个字段。如果我尝试做d.prop2["some key"]
,我会得到TypeError: 'Field' object is not subscriptable
。
发布于 2020-03-04 16:52:13
您可能从错误的模块导入了dataclass
装饰器。如果您在IDE中使用自动导入,则可能会发生这种情况。
当您从attr
(from attr import dataclass
)导入dataclass
时,就会发生上述行为。如果使用from dataclasses import dataclass
,一切都将按预期工作(将调用default_factory
以生成字段的值)。
https://stackoverflow.com/questions/60531038
复制相似问题