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

Mypy对重载函数报签名重叠错误?签名不同却类型冲突

Mypy重载签名重叠报错的原因与修复方案

报错原因

Mypy 0.991的重载匹配逻辑和Pylance存在差异:当你将a: None作为独立重载签名时,Mypy会认为它和a: Literal[False]、a: Literal[True]的签名存在潜在重叠。这是因为None属于Optional[Literal[True, False]]的范畴,Mypy无法像Pylance那样精准区分这三种字面量类型的独立分支,反而会将None与另外两个字面量的可选场景视为可能的匹配冲突,从而抛出返回类型不兼容的重叠错误。

修复方案

由于func_a(a=False)和func_a(a=None)(包括默认调用func_a())的返回类型都是str,可以将这两个重载签名合并,消除Mypy认为的重叠:

from typing import overload, Literal, Optional

@overload
def func_a(a: Literal[False] | None) -> str: ...

@overload
def func_a(a: Literal[True]) -> int: ...

def func_a(a: Optional[Literal[True, False]] = None) -> str | int:
    if a is True:
        return 1
    return "hello"

合并后,Mypy能清晰识别两种不同返回类型的分支,不会再触发重叠错误,同时也能保留原有的类型推断逻辑——func_a()、func_a(a=False)返回str,func_a(a=True)返回int。

内容的提问来源于stack exchange,提问作者Pedro Perpétua

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:25:44