提问人:Pygirl 提问时间:11/4/2023 最后编辑:ChristophePygirl 更新时间:11/4/2023 访问量:60
如何从 python 代码生成 UML 图
How to generate the UML diagram from the python code
问:
我有这个代码存储库
我正在尝试通过 pyreverse 自动生成 UML:
pyreverse -o png -p ShoppingCart ./mainService.py
原生不支持格式 png。Pyreverse 将尝试生成 它使用 Graphviz...
不幸的是,它给了我空白的图表。我该怎么做才能在图中获取项目的类?
这是文件结构:
.
├── Entity
│ ├── Apple.py
│ ├── Buy1Get1FreeApple.py
│ ├── Buy3OnPriceOf2Orange.py
│ ├── Offer.py
│ ├── Orange.py
│ ├── Product.py
│ └── ShoppingCart.py
├── Enum
│ └── ProductType.py
└── mainService.py
答:
1赞
Christophe
11/4/2023
#1
总之
假设 pyreverse 和 graphviz 的安装是正确的,您需要做的就是打包您的项目,在每个文件夹中添加一些空__init__py文件。或者,您必须在命令行中手动添加所有模块。
更多细节 - 一步一步
关于错误消息
假设所有东西都安装正确,你的命令行应该会给你警告消息,这是绝对正常的:
原生不支持格式 png。Pyreverse 将尝试生成 它使用 Graphviz...
怎么了?
该图将保持为空,因为您告诉 pyreverse 分析单个文件,并且该文件中没有定义任何类。如果要手动添加要分析的不同模块:
pyreverse -o png -p ShoppingCart mainService.py Entity\Apple.py Enum\ProductType.py Entity\Orange.py Entity\ShoppingCart.py
然后,您将很好地获得一个基本的图表:
如果预先添加选项,则可以递归方式获得项目中的所有祖先和所有关联的类:-AS
如何打包您的项目?
这很麻烦。幸运的是,打包您的项目几乎没有遗漏。如需完整参考,您可以查看此处。但简而言之,在项目文件夹中添加一个空文件就足够了,并且每个子文件夹都存储了模块:__init__.py
.
├── Entity
│ ├── __init__.py <<===== add this empty file
│ ├── Apple.py
│ ├── Buy1Get1FreeApple.py
│ ├── Buy3OnPriceOf2Orange.py
│ ├── Offer.py
│ ├── Orange.py
│ ├── Product.py
│ └── ShoppingCart.py
├── Enum
│ ├── __init__.py <<===== add this empty file
│ └── ProductType.py
├── __init__.py <<===== add this empty file
└── mainService.py
然后,您将能够运行更简单的命令行:
pyreverse -AS -o png -p ShoppingCart .
并得到这张宏伟的图表:
打包帮助 python 和 pyreverse 理解这些不是要单独分析的文件,而是在由子包等组成的包的上下文中。
评论
0赞
Pygirl
11/4/2023
感谢您的链接并提供详细的答案。它仅显示 eligibleProduct 下的一些变量。不是描述性的。是因为方法/数据内存是受保护的和私有的吗?
1赞
Christophe
11/4/2023
@Pygirl确实,似乎在没有双下划线的情况下重命名它,例如 offerType 会在图表上显示它。另一方面,__offerOnProduct在图上显示为“角色”(从语法上讲,它应该位于目标类一侧的末尾,但它就在那里。对于其他变量,您还需要知道 pyreverse 可以做什么有一些限制,例如请参阅另一个问题:stackoverflow.com/a/76147751/3723423(更正)或 stackoverflow.com/q/72388388/3723423(pyreverse 合著者之一在评论中确认的答案)
评论
graphviz
dot
brew install graphviz
dot -V
也有效 -->dot - graphviz version 9.0.0 (20230911.1827)