Automatic class attribute

Franck PEREZ franck.perez at gmail.com
Fri Feb 3 22:44:28 EST 2006


On 2/3/06, Kirk McDonald <mooquack at suad.org> wrote:
> 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
>


Works great. Thanks a lot.



More information about the Python-list mailing list