Печать 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__'
Мысли?