On Sun, Jan 18, 2009 at 15:03, Antoine Pitrou <solip...@pitrou.net> wrote:
> Dear python-dev,
>
> The Python implementation of IOBase, the base class for everything IO, has the
> (strange) idea to define a __del__ method. It is probably meant to avoid code
> duplication, so that users subclassing IOBase automatically get the
> close-on-destruct behaviour.
>
> (there is an even stranger test in test_io which involves overriding the 
> __del__
> method in a class derived from FileIO...)
>
> However, it has the drawback that all IO objects inherit a __del__ method,
> meaning problems when collecting reference cycles (the __del__ may not get
> called if caught in a reference cycle, defeating the whole point).
>
> While rewriting the IO stack in C, we have tried to keep this behaviour, but 
> it
> seems better to just do it in the tp_dealloc function, and kill the __del__
> (actually, we *already* do it in tp_dealloc, because __del__ / tp_del 
> behaviour
> for C types is shady). Subclassing IOBase in Python would keep the tp_dealloc
> and therefore the close-on-destruct behaviour, without the problems of a 
> __del__
> method.
>
> (the implementation has to take a few precautions, first revive the object, 
> then
> check its "closed" attribute/property - ignoring errors -, and if "closed" 
> ended
> False then call the close() method)
>
> What do you think?

Fine by me. People should be using the context manager for guaranteed
file closure anyway IMO.

-Brett
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to