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


258

一位同事正在寻找从Python源代码堆中生成UML类图的方法。他主要对继承关系感兴趣,对组合关系也颇有兴趣,并且不太在乎仅仅是Python原语的类属性。

源代码非常简单明了,没有太大的弊端-例如,它没有做任何花哨的元类魔术。(这主要是从Python 1.5.2时代开始的,其中散布着一些“现代”的2.3ish东西。)

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


29
Mods认为这个问题没有建设性。我(以及许多其他支持此方法的人)发现它很有用。所以呢?比没有“建设性”更大的事情!
yati sagade

13
不是建设性的,因为它会引起辩论,辩论和讨论。那不是我们想要的吗?这是一个非常相关的问题..
普山

2
@yatisagade(如果您注意到它已关闭而不是删除)(并且有这么多表决可能实际上永远无法删除)。结束只是意味着它无法获得新的答案。
tacaswell 2014年

7
@Bhushan不,我们不想讨论,我们想要具有明确答案的问答对。这并不是对它是一个有趣的问题还是一个有用的问题的判断,而是SO的主题性问题。您当然同意“什么是最好的编辑器?” (obs emacs)不是一个建设性的问题,这个问题是完全相同的。
tacaswell 2014年

@tacaswell在将问题细化为Q&A格式时,有些讨论非常相关。
user32882

Answers:


128

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


你知道如何可视化以“ _”开头的私有方法吗?
gustavz

1
不幸的是,pyreverse封装图非常庞大,因为所有内容都是水平放置的(更多是graphviz的限制,但仍然如此)。对于包含在文档中没有用。
oarfish

@oarfish作为一种解决方法,您可以选择要包含的模块,并创建几个单独的图形。
jjmontes

95

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

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


有什么办法可以让它输出矢量图形而不是Gif?我没有找到任何文档,并且这些图形对于除html doc之外的其他任何东西都毫无用处。
oarfish '16

3
目前,epydoc似乎无法生成图形。查看此错误报告
路易斯·德索萨

14
不适用于python 3
tomsv

23

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


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

8

某些行为良好的程序可能是图表,但是在一般情况下,这是无法完成的。可以在运行时扩展Python对象,并且可以将任何类型的对象分配给任何实例变量。弄清楚一个对象可以包含指向(组成)的指针的类,将需要对程序的运行时行为有充分的了解。

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

为了证明这些是不可能的,您认为如果存在这样的UML图表生成器,则可以采用任意程序,将“暂停”语句转换为会影响UML图表的语句,然后使用UML图表生成器解决暂停问题,我们知道这是不可能的。


8
有些好东西,但解决问题的手却束手无策。病理病例在这里并不重要。行为举止就足够了。
DDAA

您是什么意思“免手”?我没有写出完整的证明,但是我提供了足够的信息,使看到类似证明的任何人都可以创建它们,一个用于组合,另一个用于继承。
安德鲁·卢维西

14
这是一个比喻:diff / patch可能以多种不同的方式失败,其中有些琐碎。在许多实际案例中,它仍然非常有用。在合理的情况下,图解继承是微不足道的。委派比较棘手,但是在包的范围内通过类型推断是可行的。
DDAA

7

如果您使用eclipse,则可能是PyUML。不过还没有使用过。


1
这确实是一个很好的建议,但是FWIW我在PyUML项目站点上注意到他们还不支持Eclipse 3.4(Ganymede)。当他们解决这个问题时,我期待着尝试。
Bill Karwin

您是否碰巧让PyUML使用3.4?
anijhaw 2011年

2
该项目的最后一次提交可追溯至2009年。它没有出现在Marketplace中,并且Eclipse无法从.zip归档文件中安装它。
路易斯·德索萨


5

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


您知道使Umbrello生成完整类图的方法(以及它们之间的关系,而不仅仅是类本身的关系-不记得该图的调用方式)
vlad-ardelean 2013年

2
AAhh,您需要导入文件,然后将类拖放到绘图区域中时,会自动添加连接。
Hosane

5

vipera是一名小型应用程序设计师,其中包括uml。您可以在以下位置看到它:

per蛇

最好的祝福。


4

SPE IDE内置了UML的创造者。只需在SPE中打开文件,然后单击UML选项卡即可。

我不知道它对您的需求有多全面,但是不需要任何其他下载或配置。


遗憾的是它已经停止发展了,但是在这里仍然有效!(2013)
Abdelouahab

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.