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

如何在Python中提取函数签名作为类型?TypeScript方案无法复用

Python是否支持像TypeScript那样通过typeof提取函数签名类型?

Python的类型系统无法完全复刻TypeScript中typeof提取函数签名的便捷性,但根据Python版本不同,有对应的解决方案:

为什么你的代码无法工作

你使用Type[foo]是错误用法:typing.Type是用于表示类的类型的工具,而非函数的签名类型。这里foo是一个函数对象,Type[foo]实际表示的是这个函数对象本身的类型的类型,所以Pylance会识别为type[type],自然无法提供正确的代码补全。

解决方案

  1. Python 3.12+:原生支持提取函数类型
    Python 3.12引入了type[obj]语法(注意是小写的type,不是typing.Type),可以直接提取对象的类型,包括函数的签名:
def foo(bar: str) -> str:
    pass

# 提取foo的函数签名类型作为别名
FooFunc = type[foo]
foo_looking_func: FooFunc = foo  # 类型检查器会识别正确的签名,提供补全
  1. Python 3.11及更早版本:手动定义Callable别名
    旧版本没有原生的类型提取语法,需要手动复用函数签名定义Callable类型别名:
from typing import Callable

# 先定义与foo匹配的函数类型别名
FooFunc = Callable[[str], str]

def foo(bar: str) -> str:
    pass

foo_looking_func: FooFunc = foo  # 类型匹配,支持代码补全

如果需要确保别名和原函数签名严格一致,可以结合inspect模块动态获取签名,但静态类型检查器(如Pylance、mypy)无法识别动态生成的类型,所以静态场景下还是推荐手动定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:45:00