从这个答案到“什么是元类?” 我懂了:
您首先编写类 Foo(object),但类对象 Foo 尚未在内存中创建。
Python 将在类定义中查找元类。如果找到它,它将使用它来创建对象类 Foo。如果没有,它将使用 type 来创建类。
经过测试,似乎类的属性是在类的构造函数运行之前实例化的。我有什么误解?
测试代码:
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