2022年11月21日月曜日

Pythonでクラスなしの定数の一覧を参照する方法

Pythonでクラスなしの定数の一覧を参照する方法

概要

クラス配下の定数であれば ClassName.__dict__ などで参照できます
しかしクラス外に直接モジュール配下に定義している定数ではそうはいきません

今回はその方法を紹介します

環境

  • macOS 11.7.1
  • Python 3.10.2

サンプルコード

NAME = "hawk"
AGE = 20


def export():
    import sys
    current_module = sys.modules[__name__]
    return [(k, v) for k, v in current_module.__dict__.items() if k.isupper()]


if __name__ == "__main__":
    for i in export():
        print(i[0])
        print(i[1])

ちょっと解説

ポイントは sys.modules[__name__] です
これで現在のモジュールが取得できます
あとはそのモジュールに対して __dict__ を参照すれば OK です

今回は定数だけ取得するので key の値で先頭が大文字のフィールドだけを返却しています

また tuple で返却しているのでフィールド内に mutable な値 (dict型) が存在しているためで再度 dict などで返却しようとすると TypeError: unhashable type: 'dict' などが発生するのでその対処として tuple にしています

0 件のコメント:

コメントを投稿