我有以下课程
class A(object):
def __unicode__(self):
return u'A'
def __str__(self):
return 'AA'
>>> u"{}".format(A())
u'A'
>>> "{}".format(A())
'AA'
>>> str(A())
'AA'
"哈罗德是一个聪明的{0!s}" #首先在参数上调用str()
为什么这仍然归还你' A'不是你' AA'
>>> u"{0!s}".format(A())
u'A'
我希望它与
相同>>> u"{}".format(str(A()))
u'AA'
答案 0 :(得分:5)
我认为这是一个(次要的)文档错误。如果您在格式字符串中传递str.format
代码,str
会调用!s
,但unicode.format
会调用unicode
。
文档可能是用Python 3编写的,其中所有字符串都是Unicode,!s
始终调用str
。整个新的格式化系统从Python 3.0反向移植到Python 2.6中,并且在文档中出现了一些含糊不清的内容并不令人震惊。