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