我有一个项目,其中我的基类和子类实现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]}")
但这个错误出现了:
self.__fields_set__.add(name)
E AttributeError: __fields_set__
有人介意解释一下发生了什么事吗?我之所以想使用pydantic,是因为我需要一种将Python对象快速转换为dict
(或JSON)并返回的方法
您需要决定是从
pydantic.BaseModel
继承,还是使用@dataclass
装饰器(或者from dataclasses
,或者from pydantic.dataclasses
)根据documentation(我自己加的黑体字),两者都可以,但不能同时使用:
Peter T已经回答了您问题的第一部分,正如Document所说:“请记住,pydantic.dataclasses.dataclass是dataclasses.dataclass的替代品。”
第二部分是您希望将它们转换为dict
要回答这部分问题,可以使用数据类本身的
asdict
source关于这些模块级辅助函数(
.asdict
&;.astuple
)的讨论表明它们不符合PEP8(应该是as_dict()
和as_tuple()
),但是最后它们决定与namedtuple保持一致。_asdict()和attr.asdict()source相关问题 更多 >
编程相关推荐