繁体   English   中英

pydantic:如何为字段选择类型?

[英]pydantic: how to make a choice of types for a field?

我有一个 FastAPI 应用程序,我需要创建一个 Car class,其中属性wheelspeed可以采用 intstr 类型。 怎么做? 此代码不起作用,因为wheelspeed将只有 integer 类型(第二次打印时不是 str ):

from pydantic import BaseModel


class Car(BaseModel):
    wheel: int | str
    speed: int | str


bmw = Car(wheel=4, speed=250)
mercedes = Car(wheel='4', speed='200')

print(type(bmw.wheel), type(bmw.speed))
print(type(mercedes.wheel), type(mercedes.speed))

结果是:

<class 'int'> <class 'int'>
<class 'int'> <class 'int'>

所以,我个人只会在这里使用pydantic.StrictIntpydantic.StricStr (实际上,我几乎在任何地方都使用它们,特别是StrictStr ,因为几乎任何 object 都可以被强制转换为字符串):

import pydantic


class Car(pydantic.BaseModel):
    wheel: pydantic.StrictInt | pydantic.StrictStr
    speed: pydantic.StrictInt | pydantic.StrictStr


bmw = Car(wheel=4, speed=250)
mercedes = Car(wheel='4', speed='200')

print(type(bmw.wheel), type(bmw.speed))
print(type(mercedes.wheel), type(mercedes.speed))

这打印:

<class 'int'> <class 'int'>
<class 'str'> <class 'str'>

类型规范中有顺序。 int | str int | str ,如果可能,该值将被视为int ,否则为str 反转顺序str | int 如果可能, str | int将导致值被视为str ,否则int 颠倒顺序的问题是几乎所有东西都可以被视为str因此bmw值将被转换为str 例子:

from pydantic import BaseModel


class Car(BaseModel):
    wheel: str | int
    speed: str | int


bmw = Car(wheel=4, speed=250)
mercedes = Car(wheel='4', speed='200')

print(type(bmw.wheel), type(bmw.speed))
print(type(mercedes.wheel), type(mercedes.speed))
<class 'str'> <class 'str'>
<class 'str'> <class 'str'>

这里的关键是您需要选择优先使用哪种类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM