什么会产生以下行为?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
测试 - 这其实是真正的文档测试是真的给这些结果之间没有改变。
我想,这个文档测试相匹配的解决方案,以最小的大惊小怪(特别是在实际的继承):
>>> 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)
这是我们如何创建对象的信息:
Zope的软件包版本和代码使用>>> msg = Message('another message', 'mydomain', default='my message')
是:
- zope.i18n-3.4.0(interpolation() method code)
- zope.i18nmessageid-3.4.3(Message class code)
编辑信息:
- 添加/更新的是被重写
- 添加一些更多的信息的方法的名称(Python版本,和小信息)
- 更新了一些错误信息('msg`类是基于`unicode`类而不是`basestring`)
- 添加了实际的实现类的离子用于
@extraneon:这是蟒蛇2 .x:'print'是一个语句,basestring,unicode! – SilentGhost 2010-02-22 15:32:55
在'print'之间更改'msg'变量的值会解释它 – van 2010-02-22 15:51:01
您是否拥有该对象的实际代码? (或者说它的类。)如果你可以将它粘贴在这里,它会很有用... – 2010-02-22 15:54:07