首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有变量的Pydantic (文字,==,eq=)

带有变量的Pydantic (文字,==,eq=)
EN

Stack Overflow用户
提问于 2022-09-23 17:53:14
回答 1查看 153关注 0票数 0

如何使用pydantic来要求我的对象具有一个由变量设置的精确数值?

代码语言:javascript
复制
from pydantic import BaseModel, Field

var = 10.0

class Group(BaseModel):
     value: Literal[var] # something like this
     value: float = Field(..., eq=var) # or this

此外,创建使用变量的pydantic类的最佳方法是什么?是否有一种方法可以在类(而不是工厂)中进行验证,以便使用同一个类来验证不同的值?

代码语言:javascript
复制
from typing import Literal, TypeVar
from pydantic import BaseModel, Field

TGroup = TypeVar("TGroup", bound="Group") # does not work

def factory(var: float) -> TGroup: 
    class Group(BaseModel):
        value: Literal[var]
    return Group

# instead do something like this
class Group(BaseModel):
    def __init__(self, var: float, **data) -> None:
        self.value: str = Field(..., regex=f'{var}')
        super().__init__(**data)

obj = {'value': 10}
Group(var=10, **obj) # does not work
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-25 18:02:46

您可以使用validator来验证传递的值。

下面是您的代码可能是什么样子。不过,我对同名的两个变量有疑问.

代码语言:javascript
复制
from pydantic import BaseModel, ValidationError, validator

val: float = 10.0

class Group(BaseModel):
     # Are you sure you can have to variables with the same name?
     value: Literal[var] # something like this
     value: float

    @validator('value')
    def check_value(cls, v):
        if v == val:
            return v

        raise ValueError(f'Value must be equal to {val}')

这里是官方文件

https://pydantic-docs.helpmanual.io/usage/validators/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73831356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档