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, releasing any resources it might be holding, even if you haven't done so explicitly.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4