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? Antoine. _______________________________________________ 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