在下面来自官方教程页的代码中,我无法理解这些语句(例如,name: str)。
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)的解释。有人能为我解释一下这个语法吗?在以这种方式创建类时,您如何检查类的意思类型呢?
提前谢谢。
发布于 2021-02-10 09:48:22
在Python 3.5中,他们引入了类型提示,它遵循特定的语法(参见佩普-484和佩普-3107)。
它说,
佩普3107引入了函数注释的语法,,但是语义是故意留给未定义的的。现在有足够的第三方使用静态类型分析,社区将受益于标准库中的标准词汇表和基线工具。
这意味着Python不强制执行验证或静态评估,但是一些第三方库将能够做到这一点。
来到Pydatic的“验证执行技术”之后,他们编写了如何计算继承自BaseModel的类的逻辑
他们一直在从__init__(.)方法本身调用验证器,因此,如果输入数据不满足定义的验证条件,您将得到__init__(.)异常。
简而言之,Pydatic的BaseModel是一个普通的Python类,它接受__init__(...)参数并根据定义的类变量进行验证。
发布于 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/)。”
发布于 2021-02-10 09:47:56
语法“name:str”是Python 3.6以上的一个标准特性。这是一个类型提示,实际上并没有改变Python的基本行为。变量可以有任何值,但这是一个提示,提醒您您希望它是一个字符串。它还允许像mypy这样的指针标记您正在此变量上调用的方法,这些方法在str上不存在,因此可能在运行时中断。最后,它允许上下文敏感的编辑器预测哪些方法可用,因为它提示了哪种类型的变量,这在Python中通常是不会的。
https://stackoverflow.com/questions/66133960
复制相似问题