I would like to "stack" metaclasses.
def dec(cls):
class newmeta(cls.__metaclass__):
def __call__(cls, *args, **kwargs):
obj = cls.__metaclass__.__call__(cls, *args, **kwargs)
obj.x *= 2 #this happens AFTER __init__ is called
cls.__metaclass__ = newmeta
return cls
@dec
@dec
class Foo(object):
def __init__(self, x):
self.x = 5
print Foo().x #expect 20
However, I don't seem to be able to access Foo.__metaclass__
in this fashion.... in fact ("__metaclass__" in Foo.__dict__) == False
How would one go about this?