プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

PythonでReflection

Pythonでクラス名やメソッド名から動的にインスタンスやメソッドを取得する方法を紹介します。


インスタンスの取得

importlib.import_moduleを使ってmoduleをimportして、getattrでmoduleからクラスを取得するのが一般的なようです。

from importlib import import_module
module = import_module(module_name)
clazz = getattr(module, clazz_name)
instance = clazz()

builtinの__import__を使ってもできます。

module = __import__(module_name,fromlist=[clazz_name])
clazz = getattr(module, clazz_name)
insance = clazz()

moduleのtypeを見るとモジュール自体ではなく__init__.pyが読み込まれているようなので挙動に注意が必要そうです。


メソッドの取得

getattrメソッドでオブジェクトから取得できます。

method = getattr(instance, method_name)
method()