概要
クラス配下の定数であれば 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 件のコメント:
コメントを投稿