This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: struni: str() doesn't call __str__() of subclasses of str
Type: Stage:
Components: Interpreter Core Versions: Python 3.0
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: christian.heimes
Priority: normal Keywords:

Created on 2007-07-11 01:48 by christian.heimes, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (1)
msg32472 - (view) Author: Christian Heimes (christian.heimes) * (Python committer) Date: 2007-07-11 01:48
In the py3k-struni branch the str() constructor doesn't use __str__ when the argument is an instance of a subclass of str. A user defined string can't change __str__().

It works in Python 2.5 and in the p3yk branch.

Python 3.0x (py3k-struni:56245, Jul 10 2007, 23:34:56) 
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Mystr(str):
...     def __str__(self): return 'v'
... 
>>> s = Mystr('x')
>>> s
'x'
>>> str(s)
'x' # <- SHOULD RETURN 'v'

Python 2.5.1 (r251:54863, May  2 2007, 16:56:35) 
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Mystr(str):
...      def __str__(self): return 'v'
... 
>>> s = Mystr('x')
>>> s
'x'
>>> str(s)
'v'

Python 3.0x (p3yk:56180, Jul  6 2007, 23:35:08) 
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Mystr(str):
...     def __str__(self): return 'v'
... 
>>> s = Mystr('x')
>>> s
'x'
>>> str(s)
'v'
History
Date User Action Args
2022-04-11 14:56:25adminsetgithub: 45166
2008-01-06 22:29:46adminsetkeywords: - py3k
versions: + Python 3.0
2007-07-11 01:48:05christian.heimescreate