Python Pydantic双基础模型

问题描述

我正在将FastAPI与Pydantic配合使用,并且试图实现我的API接受cammel大小写参数,为此,我正在使用以下内容

from pydantic import BaseModel
from humps import camelize


class CamelModel(BaseModel):
    class Config:
        alias_generator = camelize
        allow_population_by_field_name = True


class MyClass(CamelModel):
    my_field1: int
    my_field2: int
    my_field3: int

到目前为止,它很好用,但是MyClass是其他类的基类,例如

class MyNewClass(MyClass):
    my_field4: float

如何获取MyNewClass以便也使用骆驼保护套基类?我尝试过类似的

from typing import Union 
class MyNewClass(Union[MyClass,CamelModel]):
    my_field4: float

但是我遇到了这个错误

TypeError: Cannot subclass <class 'typing._SpecialForm'>

有什么办法可以做到这一点? 谢谢!

解决方法

您要实现的目标称为multiple inheritance。由于您继承自从CamelModel继承的类,因此无需再次继承

适当的代码应该是

class MyNewClass(MyClass):

这是多重继承的python语法。在此处https://www.python-course.eu/python3_multiple_inheritance_example.php#An-Example-of-Multiple-Inheritance

中查看广泛的示例

您使用的代码(class MyNewClass(Union[MyClass,CamelModel]):)用于声明数据类型,这是正确的,但是使用的地方不正确。打字(据我所知)几乎仅用于函数的参数。

注意 我没有测试上面的代码,但是我很确定它可以工作。让我知道是否有任何问题

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...