343

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

源代码非常简单明了,也不是很邪恶——例如,它没有做任何花哨的元类魔法。(它主要来自 Python 1.5.2 的时代,还有一些“现代”2.3ish 的东西。)

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

4

10 回答 10

188

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

它是这样使用的:

pyreverse -o png -p yourpackage .

其中.也可以是单个文件。

于 2011-09-26T11:36:35.200 回答
100

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

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

于 2008-11-03T23:26:37.467 回答
26

检查此python 的七个 uml 工具列表

于 2011-07-07T19:51:00.583 回答
15

某些类表现良好的程序可能是图表化的,但在一般情况下,它是做不到的。Python 对象可以在运行时扩展,任何类型的对象都可以分配给任何实例变量。弄清楚一个对象可以包含哪些类的指针(组合)需要全面了解程序的运行时行为。

Python 的元类功能意味着对继承结构的推理还需要全面了解程序的运行时行为。

为了证明这些是不可能的,您争辩说,如果存在这样的 UML 图表,那么您可以使用任意程序,将“暂停”语句转换为会影响 UML 图的语句,并使用 UML 图表来解决停止问题,我们知道这是不可能的。

于 2008-11-03T22:19:02.690 回答
7

值得一提的是加佛。Python 建模/UML 工具。

于 2008-11-04T13:12:13.853 回答
6

如果您使用 Eclipse,也许是 PyUML。不过没用过。

于 2008-11-03T22:15:10.823 回答
5

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

于 2011-07-07T06:43:18.260 回答
5

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

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

于 2008-11-04T02:37:07.130 回答
5

vipera 是一个小型应用程序设计器,并且包含 uml。您可以在以下位置看到它:

蝰蛇

此致。

于 2011-12-09T12:21:10.140 回答
4

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

于 2008-11-04T21:53:54.017 回答