Печать Python не использует __repr__, __unicode__ или __str__ для подкласса Юникод?

Печать Python нет,__repr____unicode__ или же__str__ для моего подкласса Unicode при печати. Любые подсказки относительно того, что я делаю неправильно?

Вот мой код:

Использование Python 2.5.2 (r252: 60911, 13 октября 2009 г., 14:11:59) I '

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

Я не уверен, что это точное приближение к вышесказанному, но просто для сравнения:

>>> 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 ...] Звучит как лучший способ получить строковый объект isinstance (instance, basestring) и предлагает контроль над возвращаемыми значениями Unicode, а с Unicode repr ...

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

_str_ а также _repr_ выше ничего не добавляют к этому примеру, но идея состоит в том, чтобы явно показать шаблон, который будет расширяться по мере необходимости.

Просто чтобы доказать, что этот шаблон предоставляет контроль:

>>> 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__'

Мысли?

Ответы на вопрос(2)

Ваш ответ на вопрос