pythonのモジュールやクラスを動的に読み込ませる方法
環境について
動的にモジュールを読み込ませるための準備
今回紹介する方法は、Python 3.3 から追加された、importlib を使用します。
import importlib
2.x 系では別途インストールする必要があります。
pip install importlib
実際に動的にモジュールをロードする
まずは、helloworld.py のようなファイルを作成して、下記のコードを書いておきます。
def say():
print('hello')
次に先ほど作成した helloworld.py を動的に読み込ませてみたいと思います。
import importlib
module = importlib.import_module('helloworld')
module.say()
そして実行すると
hello
と表示されます。
モジュール名を動的にしたので、メソッドも動的にしたい
先ほどのコードから、メソッド名をテキストにして実行してみたいと思います。
import importlib
module = importlib.import_module('helloworld')
method = getattr(module, 'say')
method()
こちらも先ほどと同様に
hello
と、表示されます。
単純に、module から「say」を取得して実行しているだけですが、この方法でメソッドも動的に実行できそうです。
注意点
このコードでは、モジュールが存在しないときや、メソッドが存在しないときの処理を書いていないので、適宜実装する必要があります。
import importlib
try:
module = importlib.import_module('helloworld')
method = getattr(module, 'say')
method()
except ModuleNotFoundError:
print('モジュールが見つからない')
except AttributeError:
print('メソッドが見つからない')
try ~ except で例外をキャッチしてみた例です。
まとめ
WEB アプリケーションなどを作成していると、アクセスしてきた URL にクラスやメソッドを割り当てたいときがあるので、この方法を使うと、いちいちルーティングを書かなくてもいいので、便利ですね。