下面代码来自官方FastAPI
tutorials page ,我无法理解这些语句(例如,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 不强制执行类型。
- 我还看到了 Pydantic手册,但在类声明中没有看到关于此特定语法(例如,
name: str
)的解释。
有人可以为我解释一下这个语法吗?当你以这种方式创建一个类时,你如何检查它的类型?
提前致谢。
最佳答案
Python 的输入行为
Python 3.5 以上支持打字:https://docs.python.org/3/library/typing.html . 如果你的类型提示不正确,你的代码仍然会运行——正如文档所说:它只是一个类型提示。 Python 仍然是一种动态类型的语言。 但是,您可以使用 MyPy 在运行前捕获这些错误。
Pydantic 的打字行为
尽管了解 Pydantic 的行为也很重要:如果您的类型不是 str,但可以进行转换,它将首先转换为字符串,而不会出现任何错误消息。否则,它将引发错误。
如果你想在没有转换的情况下强制引发错误,你应该使用 Pydantic 严格类型:https://pydantic-docs.helpmanual.io/usage/types/#strict-types
但 Pydantic 文档告诉您的是: “[...] 仅注释声明告诉 pydantic 该字段是必需的。如果可能,字符串、字节或 float 将被强制转换为整数;否则将引发异常。” ( https://pydantic-docs.helpmanual.io/ )
关于fastapi - Pydantic 类型语法解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66133960/