首页 > 解决方案 > 如何让 pyreverse 接受并优先化类型提示?

问题描述

我想根据我的 Python(3) 源代码自动生成 UML 类图。这种情况下的挑战是在对象实例化时并非所有信息都可用。某些属性必须稍后分配,因此在最初创建对象时,某些属性的类型为无。稍后它们将具有暗示的类型。现在我希望 UML 显示提示的类型,而不是在创建对象时最初分配的类型。

以下来源:

from typing import List

class Test:
    def __init__(self):
        self.a: int = 0
        self.b: List[str] = None

生成以下 UML:

在此处输入图像描述

现在我希望属性 b 在 UML 中具有 List[str] 类型,并覆盖 pylint 认为的 b 类型。有没有办法实现这一点,还是我必须手动绘制我的 UML?

非常感谢 :)。

标签: pythonumlpylintpyreverse

解决方案


现在有效,也许 12 个月前它没有

在此处输入图像描述

其次,这是一个无效的类型,运行 mypy 它会告诉你。充其量它应该是可选的[List[str]]。更好的是将其初始化为[]

至于幕后发生的事情——

一些直接使用 python 源代码的工具将导入或运行代码,然后操作活动对象。Pydoc 就是一个例子。

据我所知, pyreverse使用 astroid,它只是解析代码而不尝试运行它,而是做出某些“推论”。因此,不会期望获取所有动态的内容,例如在应用程序运行时其类型会发生变化的变量。


推荐阅读