Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

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

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:

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.
Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc