[Python-Dev] unicode and __str__

Neil Schemenauer nas at arctrix.com
Tue Aug 31 20:41:16 CEST 2004


On Tue, Aug 31, 2004 at 10:23:33AM +0200, M.-A. Lemburg wrote:
> __str__ is indeed allowed to return Unicode objects
> (and has been for quite a while).
[...]
> Now back to your original question: the change you see
> in %-formatting was actually a bug fix. Python 2.3 should
> have exposed the same behavior as 2.4 does now.

I think the note in NEWS is not quite accurate.  It says:

    Let u'%s' % obj try obj.__unicode__() first and fallback to
    obj.__str__().

The change in PyUnicode_Join replaces a PyObject_Str() call with
PyObject_Unicode().  That means that this works in 2.4:

    class A:
        def __str__(self):
            return u'\u1234'

    u'%s' % A()

Perhaps that is unintentional but it seems cleaner to me than adding
a __unicode__ method and not providing a __str__ method.

  Neil


More information about the Python-Dev mailing list