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

