[Python] class の code object

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__ が呼ばれる。
どちらも から呼ばれていることに留意したい。

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 の定義時に必ず呼ばれるオブジェクトがあるのでとりあえず問題ない。