为了设置一个类的元类,我们使用__metaclass__
属性。元类在定义类时使用,因此在类定义之后显式设置它没有效果。
这就是我尝试显式设置元类时发生的情况;
>>> class MetaClass(type):
def __new__(cls, name, bases, dct):
dct["test_var"]=True
return type.__new__(cls, name, bases, dct)
def __init__(cls, name, bases, dct):
super(MetaClass, cls).__init__(name, bases, dct)
>>> class A:
__metaclass__=MetaClass
>>> A.test_var
True
>>> class B:
pass
>>> B.__metaclass__=MetaClass
>>> B.test_var
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
B.test_var
AttributeError: class B has no attribute 'test_var'
我能想到的最好的主意是重新定义整个类并__metaclass__
以某种方式动态添加属性。或者您知道在类定义之后设置元类的更好方法吗?