如何获取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
相关产品推荐
相关产品推荐

