D. *_*ell 23 python type-hinting
我很好奇在 Python 中指定类型不仅是 aint而是正数的最佳方法是什么int。
例子:
# As function argument
def my_age(age: int) -> str:
return f"You are {age} years old."
# As class property
class User:
id: int
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,负值都是错误的。如果我的 IDE/linter 能够发出警告,那就太好了。
有没有一种简单的方法可以使用类型提示将整数指定为正数?
soa*_*gem 18
虽然有点晚了,但现在有一个名为annotated-types 的库,它可以准确提供您想要的内容,并且是根据PEP-593实现此目的的“官方”方式。因此,对于正整数的示例,您可以使用内置typing.Annotated和带注释类型的Gt谓词,如下所示:
from typing import Annotated
from annotated_types import Gt
def my_age(age: Annotated[int, Gt(0)]) -> str:
return f"You are {age} years old."
# As class property
class User:
id: Annotated[int, Gt(0)]
Run Code Online (Sandbox Code Playgroud)
请注意,与 Python 中与类型提示相关的所有内容一样,这实际上并不在运行时强制执行约束。如果你想强制执行它,你仍然需要自己构建断言。
如果您使用 FastAPI,则可以使用PositiveIntfrom pydantic.
from pydantic.types import PositiveInt
class Pizza:
price: PositiveInt
Run Code Online (Sandbox Code Playgroud)
了解更多:https ://pydantic-docs.helpmanual.io/usage/types/#pydantic-types
我的方法是定义一个NewType:
PositiveInt = NewType('PositiveInt', int)
Run Code Online (Sandbox Code Playgroud)
也许还有一个助手,比如:
def assert_positive(n: int) -> PositiveInt:
assert n > 0
return PositiveInt(n)
Run Code Online (Sandbox Code Playgroud)
这不是铁定的(因为你仍然可以说PositiveInt(-5)或类似的话),但大多数类型都可以通过强制转换来覆盖;仅仅强制进行明确的声明就可以大大防止大多数错误。
| 归档时间: |
|
| 查看次数: |
12853 次 |
| 最近记录: |