from pydantic import BaseModel
class A(BaseModel):
data: dict | list | BaseModel
class B(BaseModel):
data: BaseModel | dict | list
a1 = A(data={"a": 1, "b": 2})
a2 = A(data=a1)
a3 = A(data=["1", "2"])
b1 = B(data={"a": 1, "b": 2})
b2 = B(data=b1)
b3 = B(data=["1", "2"])
print(a1) # "data={'a': 1, 'b': 2}" 正常
print(a2) # "data=A(data={'a': 1, 'b': 2})" 正常
print(a3) # "data=['1', '2']" 正常
print(b1) # "data=BaseModel()" 不正常
print(b2) # "data=B(data=BaseModel())" 正常
print(b3) # "data=['1', '2']" 正常
这里可以看到对于 b1 的实例化,data 的值并没有成功赋值给 b1.data
按理来说,不管我做不做类型注解,这里都不应该影响我正常赋值和实例化
环境:
python3.10.8
pydantic==2.6.3
当我把 pydantic 更新到最新的 2.10.2 时,实例化 b1 会报错,但是 b3 依然可以执行
AttributeError: 'BaseModel' object has no attribute '__private_attributes__'
我有尝试去 pydantic 的 issue 搜索过,但相关 issue 太多了,没找到相似的。
感觉像是 pydantic 的 bug ?还是因为有什么特性?