classification
Title: __str__ cannot be overridden on unicode-derived classes
Type: behavior Stage: test needed
Components: Interpreter Core, Unicode Versions: Python 2.6
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: ajaksu2, haypo, laughingboy0
Priority: normal Keywords: patch

Created on 2006-10-24 15:57 by laughingboy0, last changed 2010-03-22 12:57 by haypo. This issue is now closed.

Files
File name Uploaded Description Edit
format_unicode.patch haypo, 2009-03-30 11:45
Messages (5)
msg61028 - (view) Author: Mike K (laughingboy0) Date: 2006-10-24 15:57
class S(str):
   def __str__(self): return '__str__ overridden'

class U(unicode):
   def __str__(self): return '__str__ overridden'
   def __unicode__(self): return u'__unicode__ overridden'

s = S()
u = U()

print 's:', s
print "str(s):", str(s)
print 's substitued is "%s"\n' % s
print 'u:', u
print "str(u):", str(u)
print 'u substitued is "%s"' % u

-----------------------------------------------------

s: __str__ overridden
str(s): __str__ overridden
s substitued is "__str__ overridden"

u:
str(u): __str__ overridden
u substitued is ""

Results are identical for 2.4.2 and 2.5c2 (running
under windows).

msg84519 - (view) Author: Daniel Diniz (ajaksu2) Date: 2009-03-30 06:42
Confirmed in trunk.
msg84534 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2009-03-30 10:51
Case "S" (type str): "%s" uses _PyObject_Str() which checks the object 
type with PyString_CheckExact().

Case "U" (type unicode) "%s" uses PyUnicode_Check() and then calls 
PyUnicode_Format(). PyUnicode_Format() uses PyUnicode_Check() to check 
the object object. It should uses PyUnicode_CheckExact() instead.

xxx_CheckExact() is different than xxx_Check(): exact is only true for 
the base type, whereas the the second is also true for subclass.
msg84535 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2009-03-30 11:45
Patch: Use PyUnicode_CheckExact() instead of PyUnicode_CheckExact() in 
PyUnicode_Format() to use obj.__unicode__ slot.
msg101501 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-03-22 12:56
Commited: r79278+r79280 (trunk), r79281 (py3k), r79282 (3.1), r79283 (2.6).
History
Date User Action Args
2010-04-27 14:45:23eric.smithlinkissue8128 superseder
2010-03-22 12:57:04hayposetstatus: open -> closed
resolution: fixed
2010-03-22 12:56:53hayposetmessages: + msg101501
2009-03-30 11:45:53hayposetfiles: + format_unicode.patch
keywords: + patch
messages: + msg84535
2009-03-30 10:51:54hayposetmessages: + msg84534
2009-03-30 06:42:29ajaksu2settype: behavior
components: + Unicode
versions: + Python 2.6, - Python 2.5
nosy: + ajaksu2, haypo

messages: + msg84519
stage: test needed
2006-10-24 15:57:03laughingboy0create