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

如何获取Python指定包的所有函数与类?

获取Python特定包的所有函数与类的方法

以下是几种可行的实现方式:

1. 递归遍历+inspect模块(推荐)

自己编写脚本,递归遍历目标包的所有子模块,提取其中的函数和类,去重后输出完整路径。以scipy为例,代码如下:

import importlib
import inspect
from typing import Set

def collect_package_members(package_name: str, visited: Set[str] = None) -> Set[str]:
    if visited is None:
        visited = set()
    try:
        module = importlib.import_module(package_name)
        visited.add(package_name)
        members = set()
        
        # 提取当前模块的非内置函数和类
        for name, obj in inspect.getmembers(module):
            if (inspect.isfunction(obj) or inspect.isclass(obj)) and not name.startswith('_'):
                members.add(f"{package_name}.{name}")
            
            # 递归处理未访问过的子模块
            if inspect.ismodule(obj) and obj.__name__ not in visited:
                members.update(collect_package_members(obj.__name__, visited))
        
        return members
    except ImportError:
        # 跳过无法导入的模块(如平台依赖模块)
        return set()

# 生成并输出scipy的所有成员
if __name__ == "__main__":
    scipy_all_members = collect_package_members("scipy")
    for member in sorted(scipy_all_members):
        print(member)

这段代码会自动遍历scipy的所有子模块,过滤掉内置的__xxx__成员,去重后按完整路径输出,完全匹配你想要的格式。

2. 借助pydoc工具

Python自带的pydoc可以生成包的HTML文档,其中包含所有成员列表:

python -m pydoc -w scipy

生成的HTML文件里会列出scipy所有模块、函数和类,但需要你手动整理成目标格式,或者写脚本解析HTML内容,灵活性不如第一种方法。

3. 利用__all__属性(局限性较大)

部分模块会通过__all__属性列出对外暴露的成员,但并非所有模块都有这个定义,且覆盖范围有限。示例:

import scipy.ndimage
print([f"scipy.ndimage.{item}" for item in scipy.ndimage.__all__])

这种方式需要逐个处理子模块,无法一次性获取整个包的所有成员。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:46:31