如何在Python运行时获取内置及第三方包函数的注解
获取内置/第三方包函数的注解方法
内置函数或部分第三方库函数(尤其是C实现的)通常不会在运行时的__annotations__属性中包含注解,这类注解一般存放在**类型存根文件(.pyi)**中,以下是几种在Python运行时获取这些注解的实用方式:
1. 使用typing.get_type_hints()
这是最便捷的方法,它会自动查找目标函数对应的类型存根,解析并返回完整的注解信息,支持内置函数、第三方库函数和自定义函数。
示例代码:
from typing import get_type_hints # 获取str.split方法的注解 split_hints = get_type_hints(str.split) print("参数注解:", {k: v for k, v in split_hints.items() if k != 'return'}) print("返回值注解:", split_hints['return'])
2. 利用inspect.signature()解析签名
inspect模块的signature()方法会自动加载类型存根,生成包含注解的函数签名对象,可从中提取参数和返回值的注解。
示例代码:
import inspect # 获取list.append的签名 append_sig = inspect.signature(list.append) # 提取参数"object"的注解 print("参数object的注解:", append_sig.parameters['object'].annotation) # 提取返回值注解 print("返回值注解:", append_sig.return_annotation)
3. 手动读取类型存根文件
如果需要更灵活的处理,可以直接读取对应模块的类型存根文件(通常是.pyi格式)。标准库的存根一般位于Python安装目录下的Lib/typeshed/stdlib路径,第三方库的存根可能在包的stubs目录,或单独的types-<package>包中(需通过pip安装)。
注意事项
- 确保类型存根已存在:标准库的类型存根在Python 3.8及以上版本默认包含;第三方库如果没有自带存根,需要安装对应的
types-*包(例如pip install types-requests)。 - 部分极老的第三方库可能没有官方类型存根,这种情况下无法通过上述方法获取注解,只能参考文档或自行定义。
内容的提问来源于stack exchange,提问作者Mohit Saini
相关产品推荐
相关产品推荐

