我想知道在 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] = []
有一些主要区别。 首先,目的。 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 的重要组成部分。
主要区别是:
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
课程中,你不会出现这样的错误。