この回答から「メタクラスとは何ですか?」私はこれを得た:
最初にクラス Foo(object) を記述しますが、クラス オブジェクト Foo はまだメモリ内に作成されていません。
Python は、クラス定義でメタクラスを探します。見つかった場合は、それを使用してオブジェクト クラス Foo を作成します。そうでない場合は、型を使用してクラスを作成します。
テストしたところ、クラスのコンストラクターが実行される前に、クラスの属性がインスタンス化されるようです。私は何を誤解していますか?
テストコード:
class meta(type):
def __init__(cls, name, bases, dic):
type.__init__(cls, name, bases, dic)
print hasattr(cls, "a")
cls.a = "1"
class A(object):
a = "a"
__metaclass__ = meta
class B(object):
__metaclass__ = meta
class C(object):
__metaclass__ = meta
a = "a"
print A.a
print B.a
print C.a
出力:
True
False
True
1
1
1