On Feb 2, 12:11 am, Peter Otten <__pete...@web.de> wrote: > 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
Hi!, Unfortunately per_class attribute losses the "independence" when I try to mix it with django models.Model . from django.db import models class Plugin(models.base.ModelBase): class __metaclass__(type): def __init__(self, *args): type.__init__(self, *args) self.per_class = [] class BaseService(models.Model): class Meta: abstract = True __metaclass__ = Plugin class VirtualHost(BaseService): name = models.CharField(max_length=10) class SystemUser(BaseService): name = models.CharField(max_length=10) >>> VirtualHost.per_class is SystemUser.per_class True What am I doing wrong? Thanks again! -- http://mail.python.org/mailman/listinfo/python-list