“普通”Python 类和 Pydantic 类之间有什么区别?

问题描述 投票:0回答:2

我想知道在 python 中正常构建的类与使用 Pydantic lib 构建的类之间的区别,例如:

例如正常;

   class Node:
        def __init__(self, chave=None, esquerda=None, direita=None):
            self.chave = chave
            self.esquerda = esquerda
            self.direita = direita

例如 pydantic;

from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel


class User(BaseModel):
    id: int
    name = 'John Doe'
    signup_ts: Optional[datetime] = None
    friends: List[int] = []
python class pydantic
2个回答
2
投票

有一些主要区别。 首先,目的。 Pydantic 模型的设计目的是:

使用 python 类型注释进行数据验证和设置管理。 pydantic 在运行时强制执行类型提示,并在数据无效时提供用户友好的错误。

当您使用类型注释时,您会收到很多验证器和一些开箱即用的有用方法。

正如 Ahmed 和 John 所说,在您的示例中,您无法将

“hello”
分配给 BaseModel (pydantic) 中的
id
,因为您将
id
输入为 int。但是你可以传递一个字符串
“1”
(必须是数字,而不是浮点数),它将被映射到
int
。在这种情况下:

pydantic 使用 int(v) 将类型强制转换为 int;请参阅有关数据转换期间信息丢失的警告

Pydantic 模型还允许您使用比标准 Python 类型更多的 types,例如 urls 等等。这意味着您可以轻松验证更多数据类型。

您可以使用组合轻松创建复杂模型

Pydantic 与 orms 有某种集成:docs

还有很多其他功能,比我在一个答案中所能描述的要多得多。我强烈建议阅读文档,它非常清晰且有用。

pydantic 模型非常有用,例如在构建微服务时,您可以将接口共享为 pydantic 模型。此外,所有模型都可以轻松生成 json 模式。请参阅:架构导出模型

Pydantic 也是日益流行的 Python Web 框架 fastapi 的重要组成部分。


0
投票

主要区别是:

  • pydantic
    确保您使用的数据符合指定的结构和数据类型,
  • pydantic
    执行运行时类型检查。该库将在创建模型实例时自动验证字段,并在可能的情况下将输入数据转换为声明的类型,或者 如果不能,则抛出错误。
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_in_stock: bool

item = Item(name='Widget', price=25.99, is_in_stock=True)

如果你像这样初始化一个类

item = Item(name=12, price=25.99, is_in_stock=True)

它会引发错误,因为

name
应该是
string
,而不是数字。

在正常的

python
课程中,你不会出现这样的错误。

© www.soinside.com 2019 - 2024. All rights reserved.