Pierre Barbier de Reuille wrote: > [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
Good point Pierre. But you'll have to admit that the class usage in Python is much simpler (just derive from the class) class cB(cA): count=0 contrarily to the C++ usage where you must remind the compiler of the Counted class in every derived class. In Python, you have to bite only once thru the sour apple .... Alain -- http://mail.python.org/mailman/listinfo/python-list