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

为可变参数(args/kwargs)重载类型标注,实现精准类型推断

解决Python函数多场景返回值的精准类型推断问题

你当前的test函数用Union作为返回类型,导致类型检查器无法区分不同调用场景的返回值类型。要实现精准推断,完全可以通过typing.overload为不同调用情况单独定义类型签名。

修改后的代码如下:

from typing import overload, Union, Tuple

# 定义三种调用场景的重载签名
@overload
def test(*args: int) -> int:
    ...

@overload
def test(**kwargs: str) -> str:
    ...

@overload
def test() -> Tuple[int]:
    ...

# 函数实际实现
def test(*args: int, **kwargs: str) -> Union[int, str, Tuple[int]]:
    if args:
        return 5
    if kwargs:
        return "5"
    return (5,)

# 现在类型检查器能正确识别各变量类型
k = test(1)
j = test(i="1")
i = test()

reveal_type(k) # 正确识别为int
reveal_type(j) # 正确识别为str
reveal_type(i) # 正确识别为Tuple[int]

说明:

  • @overload用来给类型检查器提供不同调用场景的类型约定,重载的函数体只用...占位即可,无需编写实际逻辑。
  • 三个重载分别对应三种调用情况:传入至少一个位置参数、传入至少一个关键字参数、无参数传入,每种情况都指定了明确的返回类型。
  • 实际的函数实现保留原有逻辑,返回类型用Union覆盖所有可能的返回值,类型检查器会根据调用时的参数匹配对应的重载签名,从而精准推断返回类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:52:11