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()