Печать Python не используется __repr__
, __unicode__
или __str__
для моего подкласса unicode при печати. Какие-нибудь подсказки относительно того, что я делаю неправильно?Python print не использует __repr__, __unicode__ или __str__ для юникодного подкласса?
Вот мой код:
Использование Python 2.5.2 (R252: 60911, 13 октября 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'
Я не уверен, если это является точным приближение выше, но только для сравнения:
>>> 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__'
[РЕДАКТИРОВАНИЕ ...] Это звучит как самый лучший способ получить строковый объект, который isinstance (экземпляр, basestring) и предлагает контроль над юникодом ре включить значения, и с юникода магнезии является ...
>>> 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
_ ул _ и _ 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__'
Мысли?
Является ли ваш код действительно отступом, как в первом примере? – GreenMatt
Я должен был догадаться, в чем заключается ваш вопрос. Если я ошибаюсь, обновите сообщение, чтобы * включить фактический, ясный вопрос *. –
Хотя это хорошая информация, я бы хотел спросить, почему в h *** вы хотели бы подкласса str или unicode? Я имею в виду, что данные будут неизменными, поэтому результирующий объект будет совершенно бесполезен. – kay