如何定义重载类型签名?

Posted

技术标签:

【中文标题】如何定义重载类型签名?【英文标题】:How to define overloaded type signatures? 【发布时间】:2021-10-03 17:04:39 【问题描述】:

我有一个带有重载签名的 Python 函数,例如 float → float、str → int。我希望它正确输入,使用注释等,以便 mypy 可以正确检查它,并且像自动完成这样的工具可以工作。这可能吗?我很欣赏不同的工具会有不同的支持,所以 mypy 可以成为这个问题的标准。我可以使用任何已发布的 Python 3 版本。

【问题讨论】:

【参考方案1】:

是的,您可以使用 @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>

那些省略号 (...) 是文字。实际上,您将为每个重载函数签名键入三个点。实际代码将在最终定义中。

【讨论】:

以上是关于如何定义重载类型签名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中为 const 定义重载签名?

js重载

java的重写重载覆盖的差别

java中重载和重写

Python入门-6面向对象编程:05方法没有重载-方法的动态性

Java 方法重载与引用数组类型