Does python have an equivalent to Java Class.forName()?

別名:pythonで名前からclassのインスタンスを構築する方法。

eval、exec は避けた方がいいぞ。遅いし危険。

憶え方は簡単。「pythonオブジェクトは、callable かそうでないかのどちらかである」。乱暴過ぎる要約なのは承知の上で、でも、この記憶の仕方は、割といつでも通用するので悪くない。

 1 # -*- coding: utf-8 -*-
 2 class Hage1(object):
 3     def __init__(self):
 4         self.a = 10
 5 
 6 class Hage2(object):
 7     def __init__(self, a):
 8         self.a = a
 9 
10 import sys
11 thismodule = sys.modules[__name__]
12 
13 h1 = getattr(thismodule, "Hage1")()  # getattrで取り出した属性を「call」
14 print(h1.a)
15 h2 = getattr(thismodule, "Hage2")(100)  # getattrで取り出した属性を「call」
16 print(h2.a)

この「正確とはいえないけれども役に立つ憶え方」は、C/C++ から Python C API 経由で python にアクセスする際に特に有用なのねん。