标签: pyreverse

如何从Python源代码中获取类图?

Client我尝试从文件夹中的Python源代码获取类图,pyreverse但它需要__init__.py

(venv) C:\Users\User\Desktop\project> pyreverse Client
parsing Client\__init__.py...
Failed to import module Client\__init__.py with error:
No module named Client\__init__.py.
Run Code Online (Sandbox Code Playgroud)

我没有找到任何解决方案。有没有办法获取图表?

更新:文件夹 中有很多文件Client

Client.py
GUI.py
script.py
...
Run Code Online (Sandbox Code Playgroud)

这是代码的一部分Client.py

import threading


class Client:
    def __init__(self):
        self.socket = None
        self.listen_socket = None
        self.buff_dict = {}
        self.message_list_dict = {}
        self.lock = threading.Lock()
        self.target = None
        self.listen_flag = True
Run Code Online (Sandbox Code Playgroud)

这是代码的一部分GUI.py

import tkinter as tk


class Window(object):
    def __init__(self, title, font, client):
        self.title = title
        self.font …
Run Code Online (Sandbox Code Playgroud)

python uml class-diagram pyreverse

7
推荐指数
1
解决办法
2万
查看次数

如何使点(graphviz)垂直而不是水平布局未连接的节点?

我用来pyreverse从 python 代码创建类图,这会产生如下图:

在此输入图像描述

可以看出,有些类是不相关的。我希望将子图放在彼此下方,以便我可以将图像包含在文档中。

是否有一种简单的方法来修改点文件,以便将图形的断开部分放置在彼此下方?

dot graphviz pyreverse

6
推荐指数
1
解决办法
1395
查看次数

Pyreverse 不绘制关系/箭头/连接

嘿,我有点让 Pyreverse 工作了,它现在显示我的类,但它并没有在类之间建立联系。

在一节课上我得到了

class webserver:
    print('stuff')
    getcaller1 = getcaller.GetCaller()
    device_dict = getcaller1.abc(m)
Run Code Online (Sandbox Code Playgroud)

另一个包含

class GetCaller():

    def __init__():
        print('init')

    def abc(self, m):

        devices=get(m)
Run Code Online (Sandbox Code Playgroud)

然而,我在classes.png中得到的只是这个(类之间没有线条或箭头) 在此输入图像描述

该代码有效,如果我在 pip 安装的模块上运行pyreverse 内容,pyreverse 确实会打印这些箭头,但我自己的项目中一定缺少一些东西。Python 类还可以有哪些其他类型的关系?

python uml pylint pyreverse

5
推荐指数
1
解决办法
2775
查看次数

pyreverse:如何设置生成的图表的输出目录

关于pyreverse的文档很少,谷歌向我提供的一半页面,重定向到一些异国情调的页面,如果你的老板在你的浏览器历史记录中找到它们,则需要一些解释。
由于pyreverse的工作方式,您必须从根项目/django应用程序目录中使用它(例如,在其中运行它时,MyApp/docs/可能找不到您感兴趣的类的每个祖先)。这意味着生成的图表将“堵塞”您的项目文件夹,除非您手动将它们移动到其他地方。

有没有办法为pyreverse指定输出文件夹?

python pyreverse

5
推荐指数
1
解决办法
3147
查看次数

在pyreverse生成的类图中隐藏成员变量

我使用pyreverse 从Python 代码创建类图。默认情况下,它显示成员变量和方法。但通常情况下,我只想看看方法。

如果使用 -k 选项,那么它将禁用成员变量和方法,所以我想知道如何仅禁用成员变量。

uml class-diagram pylint pyreverse

5
推荐指数
0
解决办法
384
查看次数

使用绝对导入时,pyreverse 不会在 UML 中显示组合关系

我在使用 生成 UML 时遇到问题pyreverse,特别是当类不属于同一模块时以及使用绝对导入时,对于组合关系。

为了说明问题,我有以下两个模块a.py并且b.py位于同一个包中:

a.py:

from b import B


class A:
    def __init__(self, b):
        self.b: B = b
Run Code Online (Sandbox Code Playgroud)

b.py:

class B:
    pass
Run Code Online (Sandbox Code Playgroud)

pyreverse当我在终端中从包运行命令时,我得到以下 UML。它没有显示两个类A和之间的组成关系B

在此输入图像描述

from .b import B但是,当我在 中进行相对导入时a.py,我得到了预期的结果:

在此输入图像描述

似乎pyreverse在第一种情况下不认识到类B是相同的。为了解决这个问题,我尝试将包的绝对路径添加到环境变量中PYTHONPATH。然而,这并没有解决问题。

有谁知道当类在不同模块中定义时以及使用绝对导入时如何pyreverse在 UML 中生成正确的关系?

我正在使用 python 3.8.8 和 pylint 版本 2.12.2。

python uml pyreverse

5
推荐指数
1
解决办法
2459
查看次数

具有复杂类型提示的 Pyreverse UML(Union、List,...)

我正在尝试为使用 Unions 和 List 类型提示的类生成 UML 图。

一个例子是

from dataclasses import dataclass
from typing import Union   

@dataclass
class ClassA:
    name: str    

@dataclass
class ClassB:
    an_attribute: int    

@dataclass
class ClassC:
    my_class: Union[ClassA, ClassB]
Run Code Online (Sandbox Code Playgroud)

运行时pyreverse -ASmn stackoverflow_example.py -o png我获得一个未显示 classA 和 classB 用法的 UML:

具有三个未连接的类 A、B 和 C 的 UML 类图

如果我将代码替换ClassC

@dataclass
class ClassC:
    my_class: ClassA
Run Code Online (Sandbox Code Playgroud)

然后我得到一个更接近我的目标的 UML 描述: UML类图,有3个类A、B和C,C由A组成

但是,当然,这意味着当我分配某种类型时,我ClassBmy_class收到突出显示的警告,这正是它应该做的。我对应该如何工作的理解Union是我会得到这样的东西: 手动编辑的UML类图,有3个类A、B和C,C由A和B组成

该示例显示了 Union,但 List 和其他人也会有类似的行为。

有没有办法做到这一点,或者这是一个不应该这样做的设计?

python uml class-diagram pylint pyreverse

5
推荐指数
1
解决办法
1896
查看次数

Python Pyreverse 可以生成函数的 UML 图吗?

Pyreverse是一个从 Python 代码生成 UML 图的好工具。但是,我发现它无法识别函数中使用的所有类。我用下面的例子来说明我的观点:

class ClassA(object):
   def __init__(self):
         pass
class ClassB(object):
   def __init__(self):
         pass
class ClassC(object):
   def __init__(self):
      self.object_b = ClassB() 
   def perform():
      object_a = ClassA()
Run Code Online (Sandbox Code Playgroud)

如果我们使用pyreverse生成类图,很明显我们可以看到ClassB是 中的一个组件ClassCClassA但是,它无法生成其函数 中使用的与 的关系perform。Pyreverse 有什么办法可以检索ClassC和之间的关系ClassA吗?

python uml class-diagram pylint pyreverse

3
推荐指数
1
解决办法
3844
查看次数

标签 统计

pyreverse ×8

python ×6

uml ×6

class-diagram ×4

pylint ×4

dot ×1

graphviz ×1