[Python-Dev] Possible py3k io wierdness
brian at sweetapp.com
brian at sweetapp.com
Sun Apr 5 00:35:32 CEST 2009
Hey,
I noticed that the call pattern of the C-implemented io libraries is as
follows (translating from C to Python):
class _FileIO(object):
def flush(self):
if self.__IOBase_closed:
raise ...
def close(self):
self.flush()
self.__IOBase_closed = True
class _RawIOBase(_FileIO):
def close(self):
# do close
_FileIO.close(self)
This means that, if a subclass overrides flush(), it will be called after
the file has been closed e.g.
>>> import io
>>> class MyIO(io.FileIO):
... def flush(self):
... print('closed:', self.closed)
...
>>> f = MyIO('test.out', 'wb')
>>> f.close()
closed: True
It seems to me that, during close, calls should only propagate up the
class hierarchy i.e.
class _FileIO(object):
def flush(self):
if self.__IOBase_closed:
raise ...
def close(self):
_FileIO.flush(self)
self.__IOBase_closed = True
I volunteer to change this if there is agreement that this is the way to go.
Cheers,
Brian
More information about the Python-Dev
mailing list