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

如何从Python代码生成类与函数定义的UML图?

问题:用pyreverse生成包含类、函数及变量的UML图

我有一个大型多文件Python应用,希望为其制作图形化文档。为此先编写了一个小型测试代码(dummy app)来测试不同UML工具包(已安装Graphviz并配置到环境路径)。

测试代码

class User:
def __init__(self, level_security=0):
    self.level_security = level_security

def level_security_increment(level_security):
    level_security += 1
    return level_security

def printNice(aValue):
    if type(aValue) != "str":
        print(str(aValue))
    else:
        print(aValue)
    return

def main():
printNice("Process start")

for x in range(0,9):
    printNice(x)

myUser = User(3)
printNice(f"Sec lvl: {myUser.level_security}")

printNice("Process_done")

if __name__ == "__main__":
    main()

尝试过的pyreverse命令

pyreverse test.py -S -m y -A -o png
pyreverse -ASmn test.py -b -o vdx
pyreverse -ASmy test.py -o emf
pyreverse -AS -m y test.py -o emf
pyreverse -p test.py -o emf
pyreverse -AS -b test.py -o emf
pyreverse -ASmy test.py -b -o png <-- closest

其中最后一条命令生成的图最接近需求,但我希望图中能显示类、函数定义(包含函数名),甚至变量。请问只需调整pyreverse的命令参数即可实现该需求,还是需要为测试代码添加额外的包?


解答

1. 先修正代码的语法/格式问题

你的测试代码存在缩进错误(类内方法未缩进)和语法问题(type(aValue) != "str"应该直接对比str类型而非字符串),这会导致pyreverse无法正确解析类和函数结构。修正后的代码如下:

class User:
    def __init__(self, level_security=0):
        self.level_security = level_security

def level_security_increment(level_security):
    level_security += 1
    return level_security

def printNice(aValue):
    if type(aValue) != str:
        print(str(aValue))
    else:
        print(aValue)
    return

def main():
    printNice("Process start")

    for x in range(0,9):
        printNice(x)

    myUser = User(3)
    printNice(f"Sec lvl: {myUser.level_security}")

    printNice("Process_done")

if __name__ == "__main__":
    main()

2. 调整参数即可实现类、函数(含参数)的显示

你最后一条命令pyreverse -ASmy test.py -b -o png已经包含了关键参数,修正代码后再执行这条命令,就能显示:

  • -A:类的属性(比如User的level_security)和方法
  • -S:独立函数(printNice、level_security_increment)
  • -m y:类的方法详情(含参数)
  • -b:简化图的冗余元素

执行后生成的UML图会展示User类及其__init__方法(带参数),以及所有独立函数的名称和参数。

3. 关于显示变量的说明

pyreverse无法显示函数内的局部变量(比如main里的x、myUser),它只能识别并展示类级别的属性。不需要额外安装包,但如果需要更细粒度的变量展示,你需要换用其他工具;仅依赖pyreverse的话,只能覆盖类和函数级别的元素。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:55:46