如何在Python中通过路径格式字符串访问类/函数并获取文档字符串?
动态获取任意包路径下类/函数的文档字符串
要处理"package.file.module.classname"这种任意格式的路径字符串,访问对应类或函数的文档字符串,你可以通过动态导入模块+逐层获取属性的方式实现,完全支持外部包的访问需求,具体实现如下:
核心思路
- 将输入的路径字符串按
.拆分成多个层级部分 - 从最顶层的包开始,先动态导入初始模块
- 逐层遍历后续部分:优先尝试获取当前对象的属性(类、函数等),如果失败则尝试导入子模块
- 最终获取目标对象的
__doc__属性(文档字符串)
实现代码
import importlib def get_docstring(path_str): parts = path_str.split('.') if not parts: return "路径字符串不能为空" # 初始化:导入最顶层的包/模块 try: current_obj = importlib.import_module(parts[0]) except ImportError: return f"无法导入顶层模块: {parts[0]}" # 逐层处理剩余部分 for part in parts[1:]: # 先尝试获取属性(类、函数、类方法等) try: current_obj = getattr(current_obj, part) except AttributeError: # 属性不存在,尝试导入子模块 try: submodule_path = f"{current_obj.__name__}.{part}" current_obj = importlib.import_module(submodule_path) except ImportError: return f"路径 {path_str} 中无法找到 {part}" # 返回文档字符串,处理无文档的情况 return current_obj.__doc__ or "该对象未提供文档字符串"
使用示例
- 获取标准库函数的文档:
print(get_docstring("os.path.abspath")) - 获取第三方包类的文档:
print(get_docstring("requests.Session")) - 获取类方法的文档:
print(get_docstring("datetime.datetime.now"))
注意事项
- 确保目标包已经安装在你的Python环境中(第三方包需要提前用
pip安装) - 如果路径中的某一部分既是子模块名又是当前对象的属性,函数会优先获取属性而非导入子模块
内容的提问来源于stack exchange,提问作者sxh
相关产品推荐
相关产品推荐

