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

如何快速自动生成Python库类与函数组织结构的有向图?

自动生成Python库类/函数结构有向图的实用方法

当然有!手动绘制确实效率太低,尤其是API包装器这类关联复杂的库,我整理了几个靠谱的工具和方案,帮你自动生成结构可视化图:

1. Pyreverse(Pylint自带工具,快速生成类图)

这是最省心的工具之一,Pylint自带的pyreverse可以直接扫描Python代码,生成类继承、关联关系的UML图,完全不用写代码。

使用步骤:

  • 先安装Pylint:pip install pylint
  • 运行命令扫描目标库或模块:
    pyreverse -o png -p my_api_lib path/to/your/api_wrapper_module
    
    • -o 指定输出格式(支持png、svg、dot等)
    • -p 设置项目名称(会作为生成文件的前缀)
    • 最后跟上目标库的路径或模块名

运行后会在当前目录生成两个文件:

  • classes_my_api_lib.png:展示类的继承、关联关系
  • packages_my_api_lib.png:展示包/模块之间的依赖关系

2. Graphviz + 自定义脚本(高度定制化,支持函数级关联)

如果需要更灵活的控制(比如展示类与函数的调用关系、过滤特定节点),可以用graphviz库配合Python的inspect模块写自定义脚本,完全按需生成图。

示例脚本:

import inspect
import graphviz

def build_structure_graph(target_module, exclude_private=True):
    # 初始化有向图
    dot = graphviz.Digraph(comment='Library Structure', format='png')
    
    # 遍历模块中的所有类
    for class_name, class_obj in inspect.getmembers(target_module, inspect.isclass):
        # 可选:排除私有类(以__开头的)
        if exclude_private and class_name.startswith('__'):
            continue
        dot.node(class_name, shape='rectangle', label=class_name)
        
        # 遍历类的方法
        for method_name, method in inspect.getmembers(class_obj, inspect.isfunction):
            if exclude_private and method_name.startswith('_'):
                continue
            # 给方法节点命名(避免重名)
            method_node = f"{class_name}.{method_name}"
            dot.node(method_node, shape='oval', label=method_name)
            # 添加类到方法的边
            dot.edge(class_name, method_node, label='contains')
        
        # 处理继承关系
        for base_class in class_obj.__bases__:
            if base_class.__name__ != 'object' and not base_class.__name__.startswith('__'):
                dot.edge(base_class.__name__, class_name, label='inherits from')
    
    # 保存并渲染图
    dot.render('custom_library_structure')

# 使用示例:导入你的API包装器库
import your_api_wrapper
build_structure_graph(your_api_wrapper)

你可以根据需求修改脚本,比如添加函数之间的调用关系、标记特定类型的方法(如API请求方法)等。

3. Sphinx + Graphviz(整合到文档的可视化方案)

如果你的项目已经在用Sphinx生成文档,可以通过sphinx.ext.graphviz扩展自动在文档中插入类结构和继承图,适合长期维护的项目。

配置步骤:

  1. 在Sphinx的conf.py中启用扩展:
    extensions = [
        'sphinx.ext.autodoc',
        'sphinx.ext.graphviz',
    ]
    
  2. 在你的rst文档中,使用autoclass指令并添加:graphviz:选项:
    .. autoclass:: your_api_wrapper.CoreClient
       :members:
       :graphviz:
    
  3. 构建文档时,Sphinx会自动生成该类的继承关系图并嵌入到文档中。

注意事项

  • 对于动态生成的类(比如API包装器常用元类或工厂函数创建类),部分工具可能无法完全识别,这时候需要调整脚本,比如用dir()代替inspect.getmembers()来遍历属性。
  • 如果生成的图太复杂,可以通过过滤私有成员、内置类,或者分模块生成子图来简化视图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:28:11