【发布时间】:2011-07-04 11:45:17
【问题描述】:
为了设置一个类的元类,我们使用__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__ 属性。或者你知道在类定义之后设置元类的更好方法吗?
【问题讨论】: