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) 我用来pyreverse从 python 代码创建类图,这会产生如下图:
可以看出,有些类是不相关的。我希望将子图放在彼此下方,以便我可以将图像包含在文档中。
是否有一种简单的方法来修改点文件,以便将图形的断开部分放置在彼此下方?
嘿,我有点让 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 类还可以有哪些其他类型的关系?
关于pyreverse的文档很少,谷歌向我提供的一半页面,重定向到一些异国情调的页面,如果你的老板在你的浏览器历史记录中找到它们,则需要一些解释。
由于pyreverse的工作方式,您必须从根项目/django应用程序目录中使用它(例如,在其中运行它时,MyApp/docs/可能找不到您感兴趣的类的每个祖先)。这意味着生成的图表将“堵塞”您的项目文件夹,除非您手动将它们移动到其他地方。
有没有办法为pyreverse指定输出文件夹?
我使用pyreverse 从Python 代码创建类图。默认情况下,它显示成员变量和方法。但通常情况下,我只想看看方法。
如果使用 -k 选项,那么它将禁用成员变量和方法,所以我想知道如何仅禁用成员变量。
我在使用 生成 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。
我正在尝试为使用 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:
如果我将代码替换ClassC为
@dataclass
class ClassC:
my_class: ClassA
Run Code Online (Sandbox Code Playgroud)
但是,当然,这意味着当我分配某种类型时,我ClassB会my_class收到突出显示的警告,这正是它应该做的。我对应该如何工作的理解Union是我会得到这样的东西:

该示例显示了 Union,但 List 和其他人也会有类似的行为。
有没有办法做到这一点,或者这是一个不应该这样做的设计?
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是 中的一个组件ClassC。ClassA但是,它无法生成其函数 中使用的与 的关系perform。Pyreverse 有什么办法可以检索ClassC和之间的关系ClassA吗?