Чтобы установить метакласс класса, мы используем атрибут __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__
. Или вы знаете, как лучше установить метакласс после определения класса?