[Python-Dev] unicode and __str__
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
> 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
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