为什么在继承 Pydantic BaseModel 时会出现“AttributeError: __fields_set__”?

Ken*_*mar 17 python pydantic

我有这个项目,我的基类和我的子类实现pydantic.BaseModel

from pydantic import BaseModel
from typing import List
from dataclasses import dataclass

@dataclass
class User(BaseModel):
    id: int 

@dataclass
class FavoriteCar(User):
    car_names: List[str] 

car = FavoriteCar(id=1, car_names=["Acura"])
print(f"{car.id} {car.car_names[0]}")
Run Code Online (Sandbox Code Playgroud)

但是出现这个错误:

from pydantic import BaseModel
from typing import List
from dataclasses import dataclass

@dataclass
class User(BaseModel):
    id: int 

@dataclass
class FavoriteCar(User):
    car_names: List[str] 

car = FavoriteCar(id=1, car_names=["Acura"])
print(f"{car.id} {car.car_names[0]}")
Run Code Online (Sandbox Code Playgroud)

有人介意解释发生了什么吗?我想使用 pydantic 的原因是因为我需要一种方法来快速将 Python 对象转换为dict(或 JSON)并返回。

Pet*_*sen 10

您需要决定是继承自pydantic.BaseModel还是使用@dataclass装饰器(from dataclassesfrom pydantic.dataclasses)。

根据文档(我自己添加的粗体),两者都可以,但您不能同时使用两者:

如果你不想使用pydantic的BaseModel可以代替得到标准数据类相同的数据验证