Python-Druck verwendet nicht __repr__, __unicode__ oder __str__ für Unicode-Unterklassen?

Python-Druck wird nicht verwendet__repr__, __unicode__ oder__str__ für meine Unicode-Unterklasse beim Drucken. Gibt es Hinweise darauf, was ich falsch mache?

Hier ist mein Code:

Verwenden von Python 2.5.2 (r252: 60911, 13. Oktober 2009, 14:11:59)

>>> class MyUni(unicode):
...     def __repr__(self):
...         return "__repr__"
...     def __unicode__(self):
...         return unicode("__unicode__")
...     def __str__(self):
...         return str("__str__")
...      
>>> s = MyUni("HI")
>>> s
'__repr__'
>>> print s
'HI'

Ich bin nicht sicher, ob dies eine genaue Annäherung an das Obige ist, aber nur zum Vergleich:

>>> class MyUni(object):
...     def __new__(cls, s):
...         return super(MyUni, cls).__new__(cls)
...     def __repr__(self):
...         return "__repr__"
...     def __unicode__(self):
...         return unicode("__unicode__")
...     def __str__(self):
...         return str("__str__")
...
>>> s = MyUni("HI")
>>> s
'__repr__'
>>> print s
'__str__'

[EDITED ...] Es klingt wie der beste Weg, ein String-Objekt zu erhalten, das eine Instanz (Instanz, Basiszeichenfolge) ist und Kontrolle über Unicode-Rückgabewerte bietet, und mit einer Unicode-Repräsentation ...

>>> class UserUnicode(str):
...     def __repr__(self):
...         return "u'%s'" % super(UserUnicode, self).__str__()
...     def __str__(self):
...         return super(UserUnicode, self).__str__()
...     def __unicode__(self):
...         return unicode(super(UserUnicode, self).__str__())
...
>>> s = UserUnicode("HI")
>>> s
u'HI'
>>> print s
'HI'
>>> len(s)
2

Das_str_ und_Repr_ oben füge nichts zu diesem Beispiel hinzu, aber die Idee ist, ein Muster explizit zu zeigen, das nach Bedarf erweitert werden kann.

Nur um zu beweisen, dass dieses Muster Kontrolle gewährt:

>>> class UserUnicode(str):
...     def __repr__(self):
...         return "u'%s'" % "__repr__"
...     def __str__(self):
...         return "__str__"
...     def __unicode__(self):
...         return unicode("__unicode__")
... 
>>> s = UserUnicode("HI")
>>> s
u'__repr__'
>>> print s
'__str__'

Gedanken?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage