LoginSignup
30

More than 5 years have passed since last update.

Pythonで文字列から定義済みクラスのインスタンスを作る

Last updated at Posted at 2016-09-03

やってみたメモ。

前提

  • 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にご指摘を受けて変更しました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30