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

3
我想了解在Python中通常构建的类和使用Pydantic库构建的类之间的区别,例如:
例如:正常情况下;
   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] = []

假设使用第一个方法可以成功执行 self.id = 'hello',但是使用第二个方法会导致错误。 - Ahmed AEK
谢谢你,Ahmed,你能告诉我为什么吗? - Nivaldo Inácio
由于第二个类定义中的 id: int,这意味着 id 必须是一个整数值。 - John Gordon
1个回答

2

有几个主要的区别。

首先是目的。Pydantic模型旨在:

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

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

正如Ahmed和John所说,在您的示例中,您不能将"hello"分配给BaseModel(pydantic)中的id,因为您将id类型定义为int。但是,您可以传递一个字符串"1"(必须是数字,而不是浮点数),它将被映射到int。在这种情况下:

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

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

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

Pydantic 与 ORM 有某种程度的集成:文档

还有很多其他功能,远远超出我在单个答案中所能描述的范围。我强烈建议阅读文档,它非常清晰和有用。

Pydantic模型在建立微服务的例子中非常有用,您可以将您的接口共享为Pydantic模型。此外,所有模型都可以轻松生成JSON模式。参见:模式导出模型

Pydantic也是越来越受欢迎的Python Web框架FastAPI的重要组成部分。


1
谢谢你,Jace。这非常有启发性。 - Nivaldo Inácio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接