やってみたメモ。
前提
- Python3.5.2 を利用
- ファイルは以下の通り
.
├── main.py
└── classes.py
classes.py
class Hoge(object):
def __init__(self):
self.name = 'hoge'
def get_name(self):
print(self.name)
class Fuga(object):
def __init__(self):
self.name = 'fuga'
def get_name(self):
print(self.name)
globalsを使うパターン
main.py
# ここは別に`from classes import *`でも可
from classes import Hoge
from classes import Fuga
cls = globals()['Hoge']
instance = cls()
instance.get_name() #=> 'hoge'
cls = globals()['Fuga']
instance = cls()
instance.get_name() #=> 'fuga'
getattrを使うパターン
※ classes.py
はそのまま使うものとして。
main.py
import classes
cls = getattr(classes, 'Hoge')
instance = cls()
instance.get_name() #=> 'hoge'
cls = getattr(classes, 'Fuga')
instance = cls()
instance.get_name() #=> 'fuga'
getattr
の対象となるモジュール(今回でいうところのclasses
)に、文字列で動的に指定するクラスが含まれていないといけない。
実際、1クラス1ファイルで分割して書くことが多いと思いますので、あまり実用的じゃなさそうですね。あくまで1つの方法として。
他にも方法はあると思いますが、実用的なのはglobals
を使うパターンでしょうか。
※ 備考(2016/09/04)
元々タイトルを「Pythonで動的にインスタンスを生成する」にしていましたが、@mtwtk_man sanにご指摘を受けて変更しました。