一位同事正在寻求从大量的Python源代码生成UML类图.他主要对继承关系感兴趣,对组合关系有点兴趣,并不关心只是Python原语的类属性.
源代码非常简单,并不是非常邪恶 - 例如,它没有做任何花哨的元类魔法.(这主要来自Python 1.5.2的日子,其中有一些"现代"的东西.)
推荐的最佳解决方案是什么?
您可能听说过Pylint有助于静态检查Python代码.很少有人知道它附带了一个名为Pyreverse的工具,它从它读取的python代码中提取UML图.Pyreverse使用graphviz作为后端.
Epydoc是一个从Python源代码生成API文档的工具.它还以奇特的方式使用Graphviz生成UML类图.以下是从Epydoc本身的源代码生成的图表示例.
因为Epydoc执行对象内省和源解析,它可以收集有关静态代码分析器(如Doxygen)的更多信息:它可以检查相当数量的动态生成的类和函数,但也可以使用注释或未分配的字符串作为文档源,例如对于变量和类公共属性.
检查这个用于python的七个uml工具列表
某些表现良好的程序可能是可编程的,但在一般情况下,它无法完成.Python对象可以在运行时扩展,任何类型的对象都可以分配给任何实例变量.确定一个对象可以包含指向哪些类(组合)需要完全理解程序的运行时行为.
Python的元类功能意味着关于继承结构的推理还需要完全理解程序的运行时行为.
为了证明这些是不可能的,你认为如果存在这样的UML图表,那么你可以采用任意程序,将"halt"语句转换为会影响UML图的语句,并使用UML图解器来解决停顿问题,我们知道这是不可能的.
值得一提的是Gaphor.Python建模/ UML工具.
如果你使用eclipse,也许是PyUML.但是没有用过它.