Franck PEREZ wrote: > Hello all, > > Considering the following code : > > class C(object): > ...: observers = [] > ...: > ...: @classmethod > ...: def showObservers(cls): > ...: print cls.observers > > class D1(C): > ...: observers = [] #could it be moved in C ? > > class D2(C): > ...: observers = [] #could it be moved in C ? > > I want each child class of C to have it's own "observers" class attribute. > > The code I provided works... but I'd like to avoid typing "observers = > []" in each child class. > > Is it possible to define something in C which would basically mean : > "for each child class, automatically bind a new list attribute called > observers" ? > > Are metaclasses a way ? Is it possible to avoid them ? > Thanks a lot, > Franck
By an astounding coincidence, I was just working on a similar problem. Metaclasses can do this, no problem: class M(type): def __init__(cls, name, bases, dict): cls.observers = [] def showObservers(cls): print cls.observers class C(object): __metaclass__ = M class D1(C): pass class D2(C): pass -Kirk McDonald -- http://mail.python.org/mailman/listinfo/python-list