2

Python(3) ソース コードに基づいて UML クラス図を自動的に生成したいと考えています。この場合の課題は、オブジェクトのインスタンス化時にすべての情報が利用できるわけではないということです。一部の属性は後で割り当てる必要があるため、オブジェクトが最初に作成されたとき、一部の属性のタイプは None になります。後で、それらは示唆されているタイプになります。ここで、オブジェクトの作成時に最初に割り当てられたタイプではなく、ヒンティングのタイプを 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 を手動で描画する必要がありますか?

どうもありがとうございました :)。

4

1 に答える 1

0

現在は機能していますが、おそらく 12 か月前には機能しませんでした

ここに画像の説明を入力

次に、これは無効なタイプです。mypy を実行すると、そのことがわかります。せいぜい Optional[List[str]] であるべきです。さらに良いのは、初期化することです[]

舞台裏で何が起こっているかについて-

Python ソース コードを直接操作する一部のツールは、コードをインポートまたは実行してから、ライブ オブジェクトを操作します。Pydoc がその例です。

私が知る限り、pyreverseastroid を使用します。これは、コードを解析するだけで実行しようとせず、代わりに特定の「推論」を行います。そのため、アプリの実行中に型が変化する変数など、動的なものすべてを取得することは期待できません。

于 2021-11-28T21:08:44.743 に答える