为什么python str.format不调用str()

时间:2014-05-21 04:09:19

标签: python

我有以下课程

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'

根据documentation

  

"哈罗德是一个聪明的{0!s}" #首先在参数上调用str()

为什么这仍然归还你' A'不是你' AA'

>>> u"{0!s}".format(A())
u'A'

我希望它与

相同
>>> u"{}".format(str(A()))
u'AA'

1 个答案:

答案 0 :(得分:5)

我认为这是一个(次要的)文档错误。如果您在格式字符串中传递str.format代码,str会调用!s,但unicode.format会调用unicode

文档可能是用Python 3编写的,其中所有字符串都是Unicode,!s始终调用str。整个新的格式化系统从Python 3.0反向移植到Python 2.6中,并且在文档中出现了一些含糊不清的内容并不令人震惊。