Subclassing file and getting around the file.__init__ rigidity

F. GEIGER fgeiger at datec.at
Fri Apr 2 02:53:49 EST 2004


# Untested code

class BufferedFile(file):

    def __init__(self, name):
        if type(name) == file:
            self.__dict__.update(file.__dict__) # Kinda cctor
        else:
            file.__init__(self, name)
        self.buffer = None

Cheers
Franz

"Jan Burgy" <jburgy at hotmail.com> schrieb im Newsbeitrag
news:807692de.0404012244.53b476dc at posting.google.com...
> Hi all y'all,
>
> Consider the class down below. I've implemented it just because I
> needed the pushback method. Now of course the third line in __init__
> doesn't work and I even understand why. My question is: is there any
> way to make it work? Somebody proposed a patch for fileobject.c to
> allow stuff like fp = file(fp1.fileno()) but it looks like it's been
> rejected. I won't so bold as to request a change in Python. Should I
> try to re-write this class in C? Although I know C I'm much to lazy to
> take on the entire python API, not that it doesn't look nice.
>
> Thanks for your help
>
> Jan Burgy
>
> class BufferedFile(file):
>
>     def __init__(self, name):
>         if type(name) == file:
>             self = name                   # DOESN'T WORK!
>         else:
>             file.__init__(self, name)
>         self.buffer = None
>
>     def readline(self):
>         if self.buffer:
>             i = self.buffer.find("\n")
>             line, self.buffer = self.buffer[:i], self.buffer[:i+1]
>         else:
>             line = file.readline(self)
>         return line
>
>     def pushback(self, line):
>         self.buffer = line + self.buffer





More information about the Python-list mailing list