Python で文字列クラス名からオブジェクトを生成

◯ strcls 関数

def strcls(class_name):
    return globals()[class_name]

◯ 使用例

def sample_code():
    obj = strcls('Cls')(2, 3)
    print(obj.meth())   # 5


def strcls(class_name):
    return globals()[class_name]

class Cls(object):
  def __init__(self, a, b):
    self.a = a
    self.b = b
  
  def meth(self):
    return self.a + self.b

if __name__ == '__main__':
    sample_code()

◯ globals 関数

globals は、現在定義した名前の文字列をキー、束縛されたオブジェクトを値として格納した辞書です。

>>> class Cls(object):
>>>     pass
>>> 
>>> for x in globals().items(): x
... 
'__name__'
'__doc__'
'__package__'
'__loader__'
'__spec__'
'__annotations__'
'__builtins__'
'Cls'
'e'
>>> 

globals()
現在のグローバルシンボルテーブルを表す辞書を返します。



ちなみに代入もできます。

>>> globals().update({'a': 1})
>>> a
1
>>>