首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pydantic型语法解释

Pydantic型语法解释
EN

Stack Overflow用户
提问于 2021-02-10 09:15:11
回答 3查看 790关注 0票数 2

在下面来自官方教程页的代码中,我无法理解这些语句(例如,name: str)。

代码语言:javascript
复制
from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None


app = FastAPI()


@app.post("/items/")
async def create_item(item: Item):
    return item

我的意思是,我知道他们应该强制这个类型,但是他们应该怎么做呢,因为python并不强制类型。

  • 我还看到了皮丹手册,但是在类声明中没有看到关于这个特定语法(例如,name: str)的解释。

有人能为我解释一下这个语法吗?在以这种方式创建类时,您如何检查类的意思类型呢?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-10 09:48:22

Python 3.5中,他们引入了类型提示,它遵循特定的语法(参见佩普-484佩普-3107)。

它说,

佩普3107引入了函数注释的语法,,但是语义是故意留给未定义的的。现在有足够的第三方使用静态类型分析,社区将受益于标准库中的标准词汇表和基线工具。

这意味着Python不强制执行验证或静态评估,但是一些第三方库将能够做到这一点。

来到Pydatic的“验证执行技术”之后,他们编写了如何计算继承自BaseModel的类的逻辑

他们一直在从__init__(.)方法本身调用验证器,因此,如果输入数据不满足定义的验证条件,您将得到__init__(.)异常。

简而言之,Pydatic的BaseModel是一个普通的Python类,它接受__init__(...)参数并根据定义的类变量进行验证。

票数 2
EN

Stack Overflow用户

发布于 2021-02-10 09:36:19

Python的输入行为

Python3.5:https://docs.python.org/3/library/typing.html上面支持输入。如果您的类型提示不正确,您的代码仍将运行--正如文档所述:它只是一个类型提示。Python仍然是一种动态类型的语言。但是,您可以使用MyPy在运行时之前捕获这些错误。

Pydantic的分型行为

尽管理解Pydantic的行为也很重要:如果您的类型不是str,但是可以进行转换,它将首先转换为string,而不会出现任何错误消息。否则,将引发错误。

如果要在不进行转换的情况下强制引发错误,则应使用Pydantic严格类型:https://pydantic-docs.helpmanual.io/usage/types/#strict-types

但是这里是Pydantic文档告诉您的:“.仅批注声明告诉pydantic该字段是必需的。如果可能的话,字符串、字节或浮动将被胁迫到ints;否则将引发异常(https://pydantic-docs.helpmanual.io/)。”

票数 4
EN

Stack Overflow用户

发布于 2021-02-10 09:47:56

语法“name:str”是Python 3.6以上的一个标准特性。这是一个类型提示,实际上并没有改变Python的基本行为。变量可以有任何值,但这是一个提示,提醒您您希望它是一个字符串。它还允许像mypy这样的指针标记您正在此变量上调用的方法,这些方法在str上不存在,因此可能在运行时中断。最后,它允许上下文敏感的编辑器预测哪些方法可用,因为它提示了哪种类型的变量,这在Python中通常是不会的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66133960

复制
相关文章

相似问题

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