从Python源代码生成UML图的最佳方法是什么?

Mik*_*nat 249 python diagram uml

一位同事正在寻求从大量的Python源代码生成UML类图.他主要对继承关系感兴趣,对组合关系有点兴趣,并不关心只是Python原语的类属性.

源代码非常简单,并不是非常邪恶 - 例如,它没有做任何花哨的元类魔法.(这主要来自Python 1.5.2的日子,其中有一些"现代"的东西.)

推荐的最佳解决方案是什么?

小智 119

您可能听说过Pylint有助于静态检查Python代码.很少有人知道它附带了一个名为Pyreverse的工具,它从它读取的python代码中提取UML图.Pyreverse使用graphviz作为后端.

  • 输出类型的明显选择不应该是“-o pdf”吗?可扩展、可搜索。 (5认同)
  • 不幸的是,pyreverse 包图很大,因为所有东西都是水平放置的(更多的是 graphviz 限制,但仍然如此)。不适用于包含在文档中。 (3认同)
  • @gustavz 只需传递选项 `--filter-mode=ALL` (2认同)

pir*_*iro 92

Epydoc是一个从Python源代码生成API文档的工具.它还以奇特的方式使用Graphviz生成UML类图.以下是从Epydoc本身的源代码生成的图表示例.

因为Epydoc执行对象内省和源解析,它可以收集有关静态代码分析器(如Doxygen)的更多信息:它可以检查相当数量的动态生成的类和函数,但也可以使用注释或未分配的字符串作为文档源,例如对于变量和类公共属性.

  • 不适用于python 3 (12认同)
  • 目前,`epydoc`似乎无法生成图表.看看这个[错误报告](https://sourceforge.net/p/epydoc/bugs/372/). (3认同)
  • @may 你是怎么用的?我的Python抱怨 `print '\n' + msg.rstrip() + '\n'` `语法错误:调用'print'时缺少括号。你的意思是 print(...) 吗? (2认同)

Jor*_*bot 21

检查这个用于python七个uml工具列表

  • 自从上面提到我的开放式UML工具Pynsource http://pynsource.com以来,已经进行了许多版本更改。现在,它解析Python 3,具有缩放,布局,ASCII UML和PlantUML渲染支持。据我所知,Pynsource也是唯一可识别Python实例属性(而不仅仅是类属性)的UML工具。这意味着像self.myattr这样的表达式将在结果UML类中产生适当的属性“ myattr”。准备运行的二进制文件适用于Mac,Windows,Ubuntu 18和16-以及开源Github存储库。 (2认同)

And*_*isi 7

某些表现良好的程序可能是可编程的,但在一般情况下,它无法完成.Python对象可以在运行时扩展,任何类型的对象都可以分配给任何实例变量.确定一个对象可以包含指向哪些类(组合)需要完全理解程序的运行时行为.

Python的元类功能意味着关于继承结构的推理还需要完全理解程序的运行时行为.

为了证明这些是不可能的,你认为如果存在这样的UML图表,那么你可以采用任意程序,将"halt"语句转换为会影响UML图的语句,并使用UML图解器来解决停顿问题,我们知道这是不可能的.

  • 这里有一个类比:diff/patch可以通过很多不同的方式失败,其中一些是微不足道的.它在许多现实世界的案例中仍然非常有用.在合理的情况下,图表继承是微不足道的.委托更棘手,但在包的边界内通过类型推断是可行的. (14认同)
  • 一些好东西,但是停止解决的手放弃了它.病理病例不是这里的问题.乖巧就够了. (8认同)

Ali*_*har 7

值得一提的是Gaphor.Python建模/ UML工具.


Dav*_*cos 6

如果你使用eclipse,也许是PyUML.但是没有用过它.

  • 该项目的最后一次提交可以追溯到2009年。它没有出现在Marketplace中,并且Eclipse无法从`.zip`归档文件中进行安装。 (2认同)

cry*_*ice 5

SPE IDE 具有内置的 UML 创建器只需在 SPE 中打开文件并单击 UML 选项卡即可。

我不知道它对您的需求有多全面,但它不需要任何额外的下载或配置即可使用。


chi*_*imp 5

Sparx 的Enterprise Architect执行 Python 源代码的往返操作。他们有免费的限时试用版。


Hos*_*ane 5

Umbrello 也是如此。在菜单中转到代码 -> 导入项目,然后指向项目的根目录。然后它反转你的代码......

  • 啊啊,你需要导入文件,然后当你将类拖放到绘图区时,连接会自动添加。 (2认同)

小智 5

vipera 是一个小型应用程序设计器,其中包含 uml。你可以在:

蝰蛇

此致。