为了设置类的元类,我们使用
以下是当我尝试显式设置元类时发生的情况;
__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__
属性。或者您是否知道在类定义之后设置元类的更好方法?
B = MetaClass(B.__name__, B.__bases__, B.__dict__)
正是我所需要的。 - Utku Zihnioglu