在 pydantic 模型中包含非验证方法是不好的做法吗?

Posted

技术标签:

【中文标题】在 pydantic 模型中包含非验证方法是不好的做法吗?【英文标题】:Is it bad practice to include non-validating methods in a pydantic model? 【发布时间】:2020-05-19 17:00:01 【问题描述】:

我正在使用 pydantic 1.3 来验证我正在编写的 API 的模型。

在继承自 pydantic.BaseModel 的类中包含任意方法是否常见/良好?

我需要一些与对象关联的辅助方法,并且我正在尝试确定是否需要“处理程序”类。这些模型正在转换为 json 并发送到我也在编写的一个 restful 服务。

我的模型如下所示:

class Foo(pydantic.BaseModel):
    name: str
    bar: int
    baz: int

做这样的事情是不好的做法:

class Foo(pydantic.BaseModel):
    name: str
    bar: int
    baz: int

    def add_one(self):
        self.bar += 1

这对我来说有些道理,但我找不到任何人这样做的例子。

提前谢谢你。

【问题讨论】:

我认为您忘记了方法声明中的def。我想这可能是一些 pydantic 魔法,但它没有编译。 【参考方案1】:

是的,没关系。我们可能应该记录下来。

当你有一个与方法冲突的字段名称时,唯一的问题是,但如果你知道你的数据是什么样的,那不是问题。此外,您的代码可能会过度面向对象,但您离那还有很长的路要走。

【讨论】:

谢谢。我非常感谢 pydantic 的优秀文档。继续努力。

以上是关于在 pydantic 模型中包含非验证方法是不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用列表中的值作为 pydantic 验证器?

您将如何使用带有 FastAPI 的 asyncpg 将选择查询的返回值映射到 pydantic 模型以进行输出和验证?

如何在 pydantic 模型中解析 ObjectId?

如何在 FastAPI 中使用 Pydantic 模型和表单数据?

SQL Server 2008 查询以查找列中包含非字母数字字符的行

jsons数组的Pydantic模型