[Python-Dev] unicode and __str__

M.-A. Lemburg mal at egenix.com
Tue Aug 31 20:58:31 CEST 2004


Neil Schemenauer wrote:
> 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

I think you meant PyUnicode_Format().

> 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.

This is intended. However, you'll find that calling str(A())
will not give you a Unicode object, but an exception instead.

The reason is that even though the __str__ method may pass
back a Unicode object, PyObject_Str() still assures that
its return value is a string (and that API is used by str()).

Basically, __unicode__ is to unicode() what __str__ is
to str().

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Aug 31 2004)
 >>> Python/Zope Consulting and Support ...        http://www.egenix.com/
 >>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
 >>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________

::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::


More information about the Python-Dev mailing list