Subclassing file and getting around the file.__init__ rigidity

Jan Burgy jburgy at hotmail.com
Fri Apr 2 01:44:36 EST 2004


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