【发布时间】:2021-11-19 07:23:24
【问题描述】:
我试图了解在键入函数时如何使用重载装饰器。如果我编写以下代码并通过 mypy 运行它:
from typing import Union, overload
@overload
def myfunc(a: float, b: float) -> float: ...
@overload
def myfunc(a: int, b: int) -> int: ...
def myfunc(a: Union[float, int], b: Union[float, int]) -> Union[float, int]:
return a + b
然后我收到“错误:永远不会匹配重载的函数签名 2:签名 1 的参数类型相同或更广泛 在 1 个文件中发现 1 个错误(已检查 1 个源文件)"
我不明白为什么签名 1(即浮点数)的参数类型比签名 2(即整数)更广泛。
这是怎么回事?
【问题讨论】:
-
这很复杂,因为
mypy以特殊方式对待int和float...基本上,int将匹配float。所以你的第二个签名永远不会匹配
标签: python type-hinting mypy python-typing