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

如何在Python中通过路径格式字符串访问类/函数并获取文档字符串?

动态获取任意包路径下类/函数的文档字符串

要处理"package.file.module.classname"这种任意格式的路径字符串,访问对应类或函数的文档字符串,你可以通过动态导入模块+逐层获取属性的方式实现,完全支持外部包的访问需求,具体实现如下:

核心思路

  1. 将输入的路径字符串按.拆分成多个层级部分
  2. 从最顶层的包开始,先动态导入初始模块
  3. 逐层遍历后续部分:优先尝试获取当前对象的属性(类、函数等),如果失败则尝试导入子模块
  4. 最终获取目标对象的__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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:00:29