DRY and static attribute for multiple classes.

Peter Otten __peter__ at web.de
Wed Feb 2 00:11:48 CET 2011


Marc Aymerich wrote:

> Hi all,
> I want to provide an encapsulated static attribute called _registry
> for several classes.
> 
> I try to use inheritance in order to make it DRY: all classes inherit
> from a BaseClass that implements the _registry encapsulation. But with
> inheritance it doesn't work how I want, because a single instance of
> the _registry is shared between all of the inherited classes, and I
> want to have an independent _registry for every class.
> 
> How can I do that without coping all the code in every class?

If you want to go fancy use a metaclass:

>>> class Base(object):
...     class __metaclass__(type):
...             def __init__(self, *args):
...                     type.__init__(self, *args)
...                     self.per_class = []
...
>>> class A(Base): pass
...
>>> A().per_class is A().per_class
True
>>> class B(Base): pass
...
>>> B().per_class is B().per_class
True
>>> A().per_class is B().per_class
False




More information about the Python-list mailing list