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

How to get Class diagram from Python source code?

我尝试从 Client 文件夹中 pyreverse 的 Python 源代码中获取 class 图,但它需要 __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.

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

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

Client.py
GUI.py
script.py
...

这是 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

这是 GUI.py 代码的一部分:

import tkinter as tk


class Window(object):
    def __init__(self, title, font, client):
        self.title = title
        self.font = font
        self.client = client
        self.root = tk.Tk()
        self.root.title(title)
        self.build_window()

    def build_window(self):
        pass


class LoginWindow(Window):
    def __init__(self, client, font):
        super(LoginWindow, self).__init__('Login', font, client)
        self.build_window()

似乎您在包含 Client.py 的文件夹中没有 __init__.py。您应该能够只创建文件而无需在其中添加任何内容,因为其主要目的是指示该文件夹是一个包。

请参阅 this SO question 关于 __init__.py 以获取有关该文件的更深入的解释。

感谢@Anwarvic 和@b运行o,我想出了解决方案。

首先,在 Client 文件夹中创建空 __init__.py 文件:

(venv) C:\Users\User\Desktop\project\Client> type NUL >  __init__.py

然后到我要获取class图的Client文件夹的父文件夹:

(venv) C:\Users\User\Desktop\project> pyreverse Client -o png

但是我得到了这个错误:

The output format 'png' is currently not available.
Please install 'Graphviz' to have other output formats than 'dot' or 'vcg'.

经过一些调查,我找到了这个。然后我可以运行 pyreverse 没有任何错误。

这是我使用 pyreverse:

得到的 class 图

最方便的方法应该是拥有一个 Jupyter notebook 扩展,它可以动态生成笔记本中定义的 类 图表,就像变量检查器一样 - 可能可以选择指定替代根,例如 datetime 在第一个答案中 creating UML charts by Pylint/pyreverse within Jupyter labs / console.

注意:这将消除 pyreverse 要求显示的 类 是模块一部分的限制。