|
|
 |
 |
 |
 |
Python Programming Language
|
 |
 |
 |
 |
 |
 |
 |
 |
print bypasses calling write method for objects inheriting from file?
I created an object that inherits from file and was a bit surprised to find that print seems to bypass the write method for objects inheriting from file. An optimization I suppose. Does this surprise anyone else at all or am I missing something? import sys class FromObject(object): def write(self, string): # this works fine, gets called by print sys.stdout.write("FromObject: " + string) class FromFile(file): def __init__(self, name, mode='w'): file.__init__(self, name, mode) def write(self, string): # this does not get called by print sys.stdout.write("FromFile: " + string) a = FromObject() b = FromFile("test.txt") a.write("Foo\n") # works as expected b.write("Bar\n") # works as expected print >> a, "Baz\n" # "FromFile: Baz\nFromFile:\n" written to stdout. That's fine. print >> b, "Qux\n" b.flush() # "Qux\n" written to test.txt. b.write wasn't called :(
MisterPete wrote: > I created an object that inherits from file and was a bit surprised to > find that print seems to bypass the write method for objects > inheriting from file. An optimization I suppose. Does this surprise > anyone else at all or am I missing something?
No, your analysis is correct, though I'd consider optimization an euphemism for bug here. Noone was annoyed enough to write a patch, it seems. Peter
En Wed, 30 May 2007 04:24:30 -0300, Peter Otten <__pete@web.de> escribi: >> I created an object that inherits from file and was a bit surprised to >> find that print seems to bypass the write method for objects >> inheriting from file. An optimization I suppose. Does this surprise >> anyone else at all or am I missing something? > No, your analysis is correct, though I'd consider optimization an > euphemism > for bug here. Noone was annoyed enough to write a patch, it seems.
A one-line patch, I guess, PyFile_CheckExact instead of PyFile_Check. Or a few lines, checking if the write method is still the builtin one. As this is the third time I see this question I'll try to submit the patch. -- Gabriel Genellina
Gabriel Genellina wrote: > En Wed, 30 May 2007 04:24:30 -0300, Peter Otten <__pete @web.de> > escribi: >>> I created an object that inherits from file and was a bit surprised to >>> find that print seems to bypass the write method for objects >>> inheriting from file. An optimization I suppose. Does this surprise >>> anyone else at all or am I missing something? >> No, your analysis is correct, though I'd consider optimization an >> euphemism >> for bug here. Noone was annoyed enough to write a patch, it seems. > A one-line patch, I guess, PyFile_CheckExact instead of PyFile_Check. Or a > few lines, checking if the write method is still the builtin one. As this > is the third time I see this question I'll try to submit the patch.
Good idea ;) Don't know if it is still applicable, but here's a patch by Jeff Epler: http://groups.google.com/group/comp.lang.python/msg/91d46ff2e05e1476 Peter
On May 31, 5:54 am, Peter Otten <__pete@web.de> wrote:
> Gabriel Genellina wrote: > > En Wed, 30 May 2007 04:24:30 -0300, Peter Otten <__pete @web.de> > > escribi: > >>> I created an object that inherits from file and was a bit surprised to > >>> find thatprintseems to bypass the write method for objects > >>> inheriting from file. An optimization I suppose. Does this surprise > >>> anyone else at all or am I missing something? > >> No, your analysis is correct, though I'd consider optimization an > >> euphemism > >> for bug here. Noone was annoyed enough to write a patch, it seems. > > A one-line patch, I guess, PyFile_CheckExact instead of PyFile_Check. Or a > > few lines, checking if the write method is still the builtin one. As this > > is the third time I see this question I'll try to submit the patch. > Good idea ;) Don't know if it is still applicable, but here's a patch by > Jeff Epler: > http://groups.google.com/group/comp.lang.python/msg/91d46ff2e05e1476 > Peter
Thanks for the quick replies! I forgot to mention that I was using Python v2.4.3 but it sounds like it is still a problem anyway. Thanks Peter and Gabriel.
|
 |
 |
 |
 |
|