什么会产生以下行为?
>>> 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 的方式:
>>> msg = Message('another message', 'mydomain', default='my message')
Zope 软件包版本和使用的代码是:
编辑信息:
- 添加/更新了被覆盖的方法的名称
- 添加了更多信息(python 版本和次要信息)
- 更新了一些错误信息(`msg` 的类是基于 `unicode` 类而不是 `basestring`)
- 添加了使用的类的实际实现