这似乎喜欢的事,很可能已被问过,但搜索的一个小时左右的时间没有结果。将默认列表参数传递给数据类看起来很有希望,但这并不是我想要的。
这是问题所在:当尝试将可变值分配给class属性时,会出现错误:
@dataclass
class Foo:
bar: list = []
# ValueError: mutable default <class 'list'> for field a is not allowed: use default_factory
Run Code Online (Sandbox Code Playgroud)
我从错误消息中收集了应该使用以下内容的信息:
@dataclass
class Foo:
bar: list = field(default_factory=list)
Run Code Online (Sandbox Code Playgroud)
但是为什么不允许可变的默认值?是否要强制避免可变的默认参数问题?
我想定义一个继承自 pydantic BaseModel 的基本模型,如下所示
class BaseDomain(BaseModel):
def __init__(self, **kwargs):
self.__exceptions = []
def add_error(self, exception: GeneralException):
self.__exceptions.append(exception)
Run Code Online (Sandbox Code Playgroud)
但是当我使用继承自 BaseDomain 的产品模型时出现此错误
ValueError: "Product" object has no field "_BaseDomain__exceptions"
Run Code Online (Sandbox Code Playgroud)