Pythonでクラスを動的にインポートしてインスタンスを作りたかった
指定したクラスのインスタンスを動的に作りたい場合は__import__()を使えばできるんだそうです。→http://www.python.jp/doc/release/library/functions.html#__import__
インポートした結果帰ってくるのはクラスオブジェクトなので、インスタンス化する必要があるのでワンクッション置く感じ。
前提
classesディレクトリにclass1.pyとclass2.pyがある
それぞれClass1、Class2クラスを持っていてfoo()、bar()メソッドをそれぞれ持っている
コード
通常のインポートとインスタンス生成のおさらい
from classes.class1 import Class1 klass1 = Class1() print klass1.foo() print(repr(klass1)) # >foo # ><classes.class1.Class1 object at 0x1a33d0>
動的にインポートしてインスタンスを生成する
# -*- coding: utf-8 -*- # モジュール名、クラス名を変数で渡してインスタンス生成 module_name = 'classes.class2' class_name = 'Class2' module = __import__(module_name, globals(), locals(), [class_name], -1) Klass = getattr(module, class_name) # テンポラリなので動的に作らず決めうち klass2 = Klass() print klass2.bar() print(repr(klass2)) # >bar # ><classes.class2.Class2 object at 0x1a34b0>
クラスを動的にインポートしてインスタンスを作りたかったけれど今はMacBook Air 11インチ欲しい!です。ほしいです!!!