super not working in __del__ ?

Duncan Booth duncan.booth at invalid.invalid
Wed Feb 16 04:15:07 EST 2005


Fredrik Lundh wrote:

> in this case,
> 
>   def __del__(self):
>     super(self.__class__, self).__del__()
> 
> should do the trick.

Only if nobody ever tries to subclass your class, and if they aren't going 
to subclass it why bother to use super in the first place.

>>> class Base(object):
	def __del__(self):
		print "Base.__del__"

		

>>> class A(Base):
	def __del__(self):
		print "A.__del__"
		super(self.__class__, self).__del__()

		
>>> class B(A):
	def __del__(self):
		print "B.__del__"
		super(self.__class__, self).__del__()

		
>>> a = A()

>>> del a
A.__del__
Base.__del__
>>> 
>>> b = B()
>>> del b
B.__del__
A.__del__
A.__del__
A.__del__
A.__del__
A.__del__
... and so on ...

I don't see any easy way to ensure that the __del__ method gets passed up 
the chain safely.



More information about the Python-list mailing list