bukzor wrote:
I was trying to change the behaviour of print (tee all output to a temp file) by inheriting from file and overwriting sys.stdout, but it looks like print uses C-level stuff to do its writes which bypasses the python object/inhertiance system. It looks like I need to use composition instead of inheritance, but thought this was strange enough to note. $python -V Python 2.5 """A short demo script""" class notafile(file): def __init__(self, *args, **kwargs): readonly = ['closed', '__class__', 'encoding', 'mode', 'name', 'newlines', 'softspace'] file.__init__(self, *args, **kwargs) for attr in dir(file): if attr in readonly: continue setattr(self, attr, None)
Drop the __init__ and give notafile a .write method. Composition version inheritance is not the the real issue. >>> class nf(object): def write(s): print(s) print(s) >>> print >>nf(), 'testing' testing testing Now change nf.write to put the copy where you want it. tjr -- http://mail.python.org/mailman/listinfo/python-list