Movatterモバイル変換


[0]ホーム

URL:


[Python-Dev] Why does IOBase.__del__ call .close?

MRABpython at mrabarnett.plus.com
Wed Jun 11 03:51:43 CEST 2014


On 2014-06-11 02:30, Nikolaus Rath wrote:> Hello,>> I recently noticed (after some rather protacted debugging) that the> io.IOBase class comes with a destructor that calls self.close():>> [0]nikratio at vostro:~/tmp$ cat test.py> import io> class Foo(io.IOBase):>      def close(self):>          print('close called')> r = Foo()> del r> [0]nikratio at vostro:~/tmp$ python3 test.py> close called>> To me, this came as quite a surprise, and the best "documentation" of> this feature seems to be the following note (from the io library> reference):>> "The abstract base classes also provide default implementations of some>   methods in order to help implementation of concrete stream classes. For>   example, BufferedIOBase provides unoptimized implementations of>   readinto() and readline().">> For me, having __del__ call close() does not qualify as a reasonable> default implementation unless close() is required to be idempotent> (which one could deduce from the documentation if one tries to, but it's> far from clear).>> Is this behavior an accident, or was that a deliberate decision?>To me, it makes sense. You want to make sure that it's closed, releasingany resources it might be holding, even if you haven't done soexplicitly.


More information about the Python-Devmailing list

[8]ページ先頭

©2009-2025 Movatter.jp