python - 如何定义重载类型签名?
问题描述
我有一个带有重载签名的 Python 函数,例如 float → float、str → int。我希望它正确输入,使用注释等,以便 mypy 可以正确检查它,并且像自动完成这样的工具可以工作。这可能吗?我很欣赏不同的工具会有不同的支持,所以 mypy 可以成为这个问题的标准。我可以使用任何已发布的 Python 3 版本。
解决方案
是的,您可以使用@typing.overload
装饰器。
来自https://docs.python.org/3/library/typing.html#typing.overload:
@overload
def process(response: None) -> None:
...
@overload
def process(response: int) -> tuple[int, str]:
...
@overload
def process(response: bytes) -> str:
...
def process(response):
<actual implementation>
那些省略号 ( ...
) 是字面的。实际上,您将为每个重载函数签名键入三个点。实际代码将进入最终定义。
推荐阅读
- c++ - 当我使用多态性和继承将其声明为指向具体类的指针时,如何访问具体类的成员函数
- c# - 为什么要在 ConfigureWebHostDefaults 之后运行 ConfigureServices 而不是使用启动的 ConfigureServices
- excel - 将单元格从一张表复制到另一张表的最有效方法是什么
- python - 如何处理 Pycaret 在建模时添加额外的功能?(用于重用模型)
- xcode - Xcode 12 的 AsyncDisplayKit(纹理)错误
- azure - ADF 内存不足异常
- firebase - 具有自定义域的 Firebase 托管托管网站未使用 www 前缀加载
- pants - 裤子二进制命令失败是不可翻译的错误
- r - 将输入变量的矩阵/列表转换为向量?
- javascript - 机车滚动元素在滚动和页脚被切断时消失