[EMAIL PROTECTED] wrote: > Pierre Barbier de Reuille wrote: [...] > > I thank you for your response. The equivalent of your solution is > posted hereunder: > class cA(object): > count=0 > def __init__(self): > self.__class__.count +=1 > @classmethod > def getcount(cls): > return cls.count > def __del__(self): > self.__class__.count -=1 > class cB(cA): > count=0 > def __init__(self): > super(cB,self).__init__() > for klass in self.__class__.__bases__: > klass.count +=1 > > a=cA() ; b=cA(); c= cA() > d=cB() ; e=cB(); f= cB() > a.a=1;b.a=1;c.a=1;d.a=1;e.a=1;f.a=1 > g=cA() > g.a=1 > print '#cA=',cA.getcount() # 7 > print '#cB=',cB.getcount() # 3 > del g > print '#cA=',cA.getcount() # 6 > print '#cB=',cB.getcount() # 3 > > There is nothing impossible in Python ;-) > > Alain >
Well, nothing is impossible, but it is now much much more complex ! As a proof of that, your version does not work completely :P (try deleting d for example). I add a working version, but you will also notice that I have to *explicitly* walk over all the classes of the hierarchy, testing for the one who have a "count" attribute, hoping that this attribute is indeed for counting the number of objects and not anything else ... so the solution is quite fragile and very slow. class cA(object): count=0 def __init__(self): self.__class__.count +=1 for klass in self.__class__.__bases__: if hasattr( klass, "count" ): klass.count += 1 @classmethod def getcount(cls): return cls.count def __del__(self): self.__class__.count -=1 for klass in self.__class__.__bases__: if hasattr( klass, "count" ): klass.count -= 1 class cB(cA): count=0 a=cA() ; b=cA(); c= cA() d=cB() ; e=cB(); f= cB() a.a=1;b.a=1;c.a=1;d.a=1;e.a=1;f.a=1 g=cA() g.a=1 print '#cA=',cA.getcount() # 7 print '#cB=',cB.getcount() # 3 del g del d print '#cA=',cA.getcount() # 5 print '#cB=',cB.getcount() # 2 Pierre -- http://mail.python.org/mailman/listinfo/python-list