不允许 Python 类型提示 Dict 语法错误可变默认值。使用 'default factory'

标签 python python-3.x

我不确定为什么口译员会提示这个输入的 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/

相关文章:

python - 不显示存储在运行 flask 文件的模板文件夹中的 gif 图像

python - 如何记录每个请求的 Django 应用程序的内存使用情况

python - 如果另一列中的值匹配,如何填充列中的 nan 值

python - 重复列表中的 i - n 次

python - 在 NLTK 解析器中使用整数/日期作为终端

python - 在程序中使用大量 %s,如何将变量放在多行的末尾?

python - 无法从奇怪的 json 内容中获取项目

python-3.x - python : Indexing bytes array returns an integer

python - py.test 内部错误> IndexError : list index out of range

python-3.x - 在 matplotlib 图形中插入 png 图像