爲了設置類的元類,我們使用__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__
屬性動態莫名其妙。或者你是否知道在類定義之後設置metaclass的更好方法?
感謝您的回答,「B = MetaClass(B .__ name__,B .__ bases__,B .__ dict __)」正是我所需要的。 – 2011-02-25 19:35:58