Pb with __del__ and inheritence

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Wed Mar 7 12:24:37 CET 2007


En Wed, 07 Mar 2007 07:35:05 -0300, Erwan Adam <erwan.adam at cea.fr>  
escribió:

> Can someone reproduce this bug ... I use :
Same on 2.5 Windows.

> class XObject(object):
>
>      def __del__(self):
>          print "XObject.__del__"
>          return
>
>      pass
>
> class A(XObject):
>
>      def __del__(self):
>          print "A.__del__"
>          XObject.__del__(self)
>          return
>
>      pass
>
> aaa = A()
> ------
> A.__del__
> Exception exceptions.AttributeError: "'NoneType' object has no attribute
> '__del__'" in <bound method A.__del__ of <__main__.A object at
> 0xb7bb124c>> ignored

Print XObject inside A.__del__ and you can see that it is None. That means  
that the XObject reference was set to None *before* aaa was deleted.  
Values inside the module namespace are set to None when it's destroyed (to  
break possible reference cycles, I presume). I can't find any place in the  
docs that guarantees any ordering on the object deletion, so I don't  
consider this a "bug". See the big notes on the __del__ method docs.

If you *really* must do some cleanup on A.__del__, you can't trust on  
*any* globals, and you must store a reference to anything needed inside  
__del__

-- 
Gabriel Genellina




More information about the Python-list mailing list