[Python-Dev] String formatting / unicode 2.5 bug?
Nick Coghlan
ncoghlan at gmail.com
Mon Aug 21 11:37:13 CEST 2006
John J Lee wrote:
>> And once the result has been promoted to unicode, __unicode__ is used
>> directly:
>>
>>>>> print repr("%s%s" % (a(), a()))
>> __str__
>> accessing <__main__.a object at 0x00AF66F0>.__unicode__
>> __str__
>> accessing <__main__.a object at 0x00AF6390>.__unicode__
>> __str__
>> u'hihi'
>
> I don't understand this part. Why is __unicode__ called? Your example
> doesn't appear to show this happening "once [i.e., because?] the result
> has been promoted to unicode" -- if that were true, it would "stand to
> reason" <wink> that the interpreter would then conclude it should call
> __unicode__ for all remaining %s, and not bother with __str__.
It does try to call unicode directly, but because the example object doesn't
supply __unicode__ it ends up falling back to __str__ instead. The behaviour
is clearer when the example object provides both methods:
>>> # Example (2.5b3)
... class a(object):
... def __str__(self):
... print "running __str__"
... return u'hi'
... def __unicode__(self):
... print "running __unicode__"
... return u'hi'
...
>>> print repr("%s%s" % (a(), a()))
running __str__
running __unicode__
running __unicode__
u'hihi'
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-Dev
mailing list