不允许使用Python类型提示Dict语法错误的可变默认值。使用“默认工厂”

时间:2019-12-07 00:57:42

标签: python python-3.x

我不确定为什么口译员抱怨这种类型的字典。对于这两个实例,我都会收到“ 不允许使用默认默认值。使用默认工厂”语法错误。我正在使用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批注。有人可以告诉我为什么吗?

1 个答案:

答案 0 :(得分:1)

是的,提高dataclass可以避免意外地将每个默认对象实例化的Test对象赋予相同的指示。

您可以对上述内容进行调整,以提供以下内容的默认工厂(该函数在每次需要默认值时都会创建 new 字典)

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})