【发布时间】:2022-06-26 16:02:15
【问题描述】:
我试图为我的模型设置一个私有属性(不能腌制):
from threading import Lock
from pydantic import BaseModel
class MyModel(BaseModel):
class Config:
underscore_attrs_are_private = True
_lock: Lock = Lock() # This cannot be copied
x = MyModel()
但这会产生错误:
Traceback (most recent call last):
File ".../example.py", line 9, in <module>
x = MyModel()
File "pydantic\main.py", line 349, in pydantic.main.BaseModel.__init__
File "pydantic\main.py", line 419, in pydantic.main.BaseModel._init_private_attributes
File "pydantic\fields.py", line 1180, in pydantic.fields.ModelPrivateAttr.get_default
File "pydantic\utils.py", line 657, in pydantic.utils.smart_deepcopy
File "...\lib\copy.py", line 161, in deepcopy
rv = reductor(4)
TypeError: cannot pickle '_thread.lock' object
它似乎失败了,因为Lock 不能被腌制(或复制)。此外,似乎 Pydantic 出于某种原因试图复制私有属性。我查看了文档,找不到一个模型属性来覆盖它。此外,配置 arbitrary_types_allowed 或 copy_on_model_validation 无效。我也尝试使用PrivateAttr(default=Lock()),但没有帮助。
我想将此属性设为私有。如何将无法腌制的私有属性设置为 Pydantic 模型?
【问题讨论】: