以下是可能导致此行为的原因:
>>> 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
谢谢所有的建议。
我感觉这不会有更多帮助,但对于好奇的读者(和冒险的Python程序员),这是对象的实现:
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对象的方式:
>>> msg = Message('another message', 'mydomain', default='my message')
Zope所使用的版本和代码包括:
- zope.i18n-3.4.0 (interpolation()方法代码 )
- zope.i18nmessageid-3.4.3 (Message类代码)
编辑信息:
- 添加/更新了被覆盖的方法名称
- 添加了一些更多的信息(Python版本和一些细节信息)
- 修正了一些错误的信息(`msg`的类基于`unicode`而不是`basestring`)
- 添加了实际使用的类的实现
print
是一个语句,basestring和unicode! - SilentGhostprint
语句之间更改msg
变量的值将解释它。 - van