python 3's adoption

Alf P. Steinbach alfps at start.no
Thu Jan 28 12:37:56 EST 2010


* Lie Ryan:
> On 01/28/10 20:12, Alf P. Steinbach wrote:
>>   >>> import builtins
>>   >>>
>>   >>> org_print = print
>>   >>> builtins.print = 666
>>   >>>
>>   >>> print( "trallala" )
>>   Traceback (most recent call last):
>>     File "<stdin>", line 1, in <module>
>>   TypeError: 'int' object is not callable
>>   >>> org_print( "but is that really so smart?" )
>>   but is that really so smart?
>>   >>> _
> 
> Monkey patching follows (or should follow) the same rule as class
> inheritance overriding: the overrider's input domain must be a superset
> of the overriden's input domain and the overrider's output range must be
> a subset of the overriden's output range. 666 object (int) is not even
> remotely compatible with function object.

Yes, that's my point.

A 'print' replacement should ideally provide all the guarantees on behavior that 
  standard 'print' does.

And with that it's not so easy to put in a /correct/ replacement of 'print'; in 
particular, it has to honor the 'file' keyword argument.

Thus the 3.x design makes it easy to replace 'print' incorrectly.

I'd rather still had 'print' as keyword... ;-)


Cheers,

- Alf



More information about the Python-list mailing list