我不确定为什么口译员会提示这个输入的 Dict。对于这两个实例,我得到一个“ 不允许可变默认值。使用默认工厂 ”语法错误。我正在使用 python 3.7.3
from dataclasses import dataclass
from typing import Dict
@dataclass
class Test:
foo: Dict[str, int] = {}
bar: Dict[str, float] = {'blah': 2.0}
弄清楚了。这是导致问题的@dataclass 注释。有人能告诉我为什么吗?
最佳答案
是的,提高 dataclass
是为了避免您意外地为每个使用默认值实例化的 Test 对象提供相同的字典。
您可以调整上述内容以提供默认工厂(每次需要默认值时创建一个新字典的函数),如下所示:
from dataclasses import dataclass, field
from typing import Dict
@dataclass
class Test:
foo: Dict[str, int] = field(default_factory=dict)
bar: Dict[str, float] = field(default_factory=lambda: {'blah': 2.0})
关于不允许 Python 类型提示 Dict 语法错误可变默认值。使用 'default factory',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59222110/