如何获取Python中带@overload装饰器函数的所有签名?
获取@overload装饰函数的所有签名
要获取被@overload装饰的函数的所有重载签名,可以借助typing模块的内部函数_get_overloads,再结合inspect.signature解析每个重载的签名结构。
实现代码
from typing import overload import inspect import typing class Foo: @overload def foo(x: int, y: float): ... @overload def foo(y: float): ... def foo(a, b=None): if b is None: x, y = 1, a else: x, y = a, b return y / x # 获取目标函数的所有重载定义 overload_defs = typing._get_overloads(Foo.foo) # 转换为inspect.Signature对象列表 overload_signatures = [inspect.signature(def_) for def_ in overload_defs] # 验证结果 print(overload_signatures) # 输出: # [<Signature (x: int, y: float)>, <Signature (y: float)>]
注意事项
typing._get_overloads是Python标准库的内部函数,官方文档未公开,未来版本可能存在变更风险。- 如果需要长期稳定的方案,可以考虑使用类型检查相关的第三方库,但需自行评估兼容性。
内容的提问来源于stack exchange,提问作者Curious
相关产品推荐
相关产品推荐

