[Tutor] deriving class from file to handle input line numbers?
Andreas Kostyrka
andreas at kostyrka.org
Thu Aug 18 10:10:51 CEST 2005
My try at this problem:
# filecounter.py:
#!/usr/bin/env python
class CountedFile(file):
def __init__(self, *args, **kw):
self.linecount = 0
super(CountedFile, self).__init__(*args, **kw)
def read(self, *args):
data = super(CountedFile, self).read(*args)
self.linecount += data.count("\n")
return data
def readline(self, *args):
data = super(CountedFile, self).readline(*args)
self.linecount += data.count("\n")
return data
def next(self):
data = super(CountedFile, self).next()
self.linecount += data.count("\n")
return data
if __name__ == "__main__":
f = CountedFile("filecounter.py")
f.readline()
print f.linecount
for x in f:
print "%3d: %s" % (f.linecount, x.rstrip())
Only drawback: It cannot be used for already open files, like sys.stdin.
For these a delegation based solution (which probably could be coded up with __getattr__)
seems plausible.
One explanation: One needs to reimplement all reading interfaces, because readline doesn't use an
overridden read method.
Andreas
Am Dienstag, den 16.08.2005, 15:35 +0200 schrieb Duncan Gibson:
> I wrote:
> > > class MyFile(file):
> > > etc
> > >
> > > I couldn't see how to have an instance of MyFile returned from the
> > > built-in 'open' function. I thought this was the crux of the problem.
>
> Kent Johnson replied:
> > open() is actually just an alias for file():
> > >>> open is file
> > True
>
> Thank you very much! You have just provided me with the vital piece of
> information I needed and everything has just clicked into place.
>
> Now that I know that I've searched the documentation again and found:
>
> The file() constructor is new in Python 2.2 and is an alias for
> open(). Both spellings are equivalent. The intent is for open()
> to continue to be preferred for use as a factory function which
> returns a new file object. The spelling, file is more suited to
> type testing (for example, writing "isinstance(f, file)").
>
> See http://docs.python.org/lib/built-in-funcs.html#l2h-25
>
> Cheers
> Duncan
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Dies ist ein digital signierter Nachrichtenteil
Url : http://mail.python.org/pipermail/tutor/attachments/20050818/1c30f8a3/attachment-0001.pgp
More information about the Tutor
mailing list