为什么Python中的str.format()不会调用str()函数

4
我有以下类:
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'

根据 文档

"Harold's a clever {0!s}" # 首先调用 str() 函数对参数进行转换

为什么这个表达式返回的值仍然是 'A' 而不是 'AA' 呢?
>>> u"{0!s}".format(A())
u'A'

我认为这与以下情况相同:
>>> u"{}".format(str(A()))
u'AA'

3
因为它是Unicode字符串? - thefourtheye
此外,你应该从 __str____unicode__ 返回字符串,否则你的程序将会失败。 - thefourtheye
哈哈,抱歉我不知道为什么会打出 print - James Lin
1个回答

5
我认为这是一个(小)文档错误。如果在格式化字符串中传递!s代码,str.format调用str,但是unicode.format调用unicode。文档可能是针对Python 3编写的,其中所有字符串都是Unicode,并且!s始终调用str。整个新的格式化系统从Python 3.0回溯到Python 2.6,不难想象一些歧义会通过文档滑入。

我想我同意。我正在为此在错误跟踪器上提出问题。 - Veedrac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接