別名: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 にアクセスする際に特に有用なのねん。