On Mon, 21 Aug 2006, Nick Coghlan wrote:

> 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:
[...]

If the interpreter is falling back from __unicode__ to __str__ (rather 
than the other way around, kind-of), that makes much more sense.  I 
understood that __unicode__ was not provided, of course -- what wasn't 
clear to me was why the interpreter was calling/accessing those 
methods/attributes in the sequence it does.  Still not sure I understand 
what the third __str__ above comes from, but until I've thought it through 
again, that's my problem.


John
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to