当将Pydantic模型传递给另一个模型时,该模型被复制。

4

Pydantic在将一个模型传递给另一个模型的构造函数时会复制该模型。这样做会导致失败:

from pydantic import BaseModel

class Child(BaseModel):
    pass
    
class Parent(BaseModel):
    child: Child
        
child = Child()
parent = Parent(child=child)
assert parent.child is child
# Fails

当将child传递给父类的构造函数时,看起来child被复制了,因此childparent.child的身份不同。 我希望它们是相同的,因为我需要稍后修改child的属性,并且更改应该在parent.child中可见。

如何使Pydantic不复制child

1个回答

8
我已经找到了答案。看起来这是一个问题,但通过创建一个配置选项copy_on_model_validation,它已经被在PR中修复。如果将此选项设置为False,则不会在构造中复制子类。
这不会复制子类:
from pydantic import BaseModel

class Child(BaseModel):
    class Config:
        copy_on_model_validation = False

class Parent(BaseModel):
    child: Child

child = Child()
parent = Parent(child=child)
assert parent.child is child
# Passes

有人能解释一下为什么选择(浅)复制作为默认行为吗?这似乎违反了惯常的Python语法。 - amka66

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接