example
import traceback class Klass(object): class __metaclass__(type): def __init__(self, name, bases, dict): print '__metaclass__' traceback.print_stack() type.__init__(self, name, bases, dict) print 'class' traceback.print_stack()
result
まず Klass の内部コードが呼ばれる。次に __metaclass__ が呼ばれる。
どちらも <module> から呼ばれていることに留意したい。
class File "metaclass.py", line 3, in <module> class Klass(object): File "metaclass.py", line 10, in Klass traceback.print_stack() __metaclass__ File "metaclass.py", line 3, in <module> class Klass(object): File "metaclass.py", line 7, in __init__ traceback.print_stack()
単純に class の attr の定義順を知りたいだけなんだけど。
super() もそうだけど、ここまで踏み込むと無理でないにしろ面倒なことが出てくる。
今書いてるコードは class の定義時に必ず呼ばれるオブジェクトがあるのでとりあえず問題ない。