如何定义重载类型签名?
How to define overloaded type signatures?
我有一个带有重载签名的 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>
那些省略号 (...
) 是文字。实际上,您将为每个重载函数签名键入三个点。实际代码将放在最终定义中。
我有一个带有重载签名的 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>
那些省略号 (...
) 是文字。实际上,您将为每个重载函数签名键入三个点。实际代码将放在最终定义中。