You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mypy提示重载函数签名2无法匹配报错原因求解

错误触发原因

这个报错的核心逻辑来自两部分规则的共同作用:

  • PEP 484 类型规范明确约定,Python 类型系统中int是float的子类型,所有int类型的值都可以合法传入标注为float类型的参数位置,二者不存在类型冲突。
  • Mypy 匹配重载函数签名时遵循从上到下依次匹配、匹配成功即终止的规则,不会主动寻找最精确的签名,只会按顺序匹配第一个符合参数类型要求的签名。

你当前的代码中,参数范围更宽的float签名放在了第一位:当传入两个int类型的参数时,因为int兼容float,会直接命中第一个签名,第二个int签名永远没有被匹配到的可能,因此 Mypy 抛出该错误。

修复方案

只需要调整重载签名的顺序,把参数类型更精确、范围更窄的签名放在前面,更宽泛的签名放在后面即可:

from typing import Union, overload

@overload
def myfunc(a: int, b: int) -> int: ...
@overload
def myfunc(a: float, b: float) -> float: ...

def myfunc(a: Union[float, int], b: Union[float, int]) -> Union[float, int]:
    return a + b

调整顺序后,传入两个int会优先命中第一个签名返回int类型,传入float参数则会命中第二个签名返回float类型,符合预期,也不会再触发 Mypy 报错。

内容的提问来源于stack exchange,提问作者Andrew Stewart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:36:01