首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pydantic strict模式-抛出可选

Pydantic strict模式-抛出可选
EN

Stack Overflow用户
提问于 2021-04-01 03:26:33
回答 1查看 116关注 0票数 1

我有一个类似下面的模型

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


class FooModel(BaseModel):
    bar: Optional[int]
    baz: Optional[str]

是否可以动态删除Optional/make barbaz字段?有效地将上述FooModel动态转换为

代码语言:javascript
复制
class FooModel(BaseModel):
    bar: int
    baz: str

我试过了

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


class FooModel(BaseModel):
    bar: Optional[int]
    baz: Optional[str]

    def __init__(self, strict: bool = False, **data) -> None:
        if strict:
            for name in self.__fields__.keys():
                self.__fields__[name].required = True
        super().__init__(**data)

但这会影响从FooModel继承的所有其他类(__fields__是一个类变量,我没有设法对其进行深度复制),这当然是不可取的。

EN

回答 1

Stack Overflow用户

发布于 2021-04-01 03:49:48

为什么从FooModel继承的类不应该具有这些必需的属性?

如果出于某种原因,只有FooModel需要foobar,您可以在if中添加检查。

代码语言:javascript
复制
    def __init__(self, strict: bool = False, **data) -> None:
        if strict and type(self) == FooModel:

但是,您也可以选中Required Optional fields;此字段在创建模型对象时是必需的,但它的值也可以是None

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


class FooModel(BaseModel):
    bar: Optional[int] = ...
    baz: Optional[str] = ...

class BarModel(FooModel): pass

FooModel(bar=42, baz="hello world")
BarModel(bar=None, baz=None)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66894106

复制
相关文章

相似问题

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