Что может вызвать следующее поведение?Интерполяция строки python
>>> print str(msg)
my message
>>> print unicode(msg)
my message
Но:
>>> print '%s' % msg
another message
Подробнее:
- мой
msg
объект наследуется отunicode
. - методы
__str__
/__unicode__
/__repr__
методы были переопределены, чтобы вернуть строку'my message'
. - объект
msg
был инициализирован строкой'another message'
. - это работает на Python 2.5
- переменная
msg
не была изменена между тестами - это на самом деле реальный doctest, что действительно дает эти результаты.
Я хотел бы получить решение, которое соответствует этому doctest, с минимальными усилиями (особенно вокруг фактического наследования):
>>> print '%s' % msg
my message
Спасибо за все предложения.
Я не чувствую, что это поможет больше, но для любопытных читателей (и авантюрной pythonist), вот реализация объекта:
class Message(zope.i18nmessageid.Message):
def __repr__(self):
return repr(zope.i18n.interpolate(self.default, self.mapping))
def __str__(self):
return zope.i18n.interpolate(self.default, self.mapping)
def __unicode__(self):
return zope.i18n.interpolate(self.default, self.mapping)
Это то, как мы создаем объект Сообщи:
>>> msg = Message('another message', 'mydomain', default='my message')
Zope версии пакетов и код, используемый являются:
- zope.i18n-3.4.0 (interpolation() method code)
- zope.i18nmessageid-3.4.3 (Message class code)
EDIT INFO:
- добавлены/обновлены имена методов, которые были переопределены
- добавил некоторую информацию (питон версия, и второстепенная информация)
- обновил неверную информацию (класс `msg` основан на классе` unicode`, а не `basestring`)
- добавил фактическое исполнение иона класса используется
@extraneon: это питон 2 .x: 'print' - это инструкция, basestring, unicode! – SilentGhost
изменение значения переменной 'msg' между' print' s объясняет это – van
У вас есть фактический код для этого объекта? (Или, скорее, его класс.) Было бы полезно, если бы вы могли вставить его здесь ... –