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

4 投票
1 回答
1106 浏览
提问于 2025-04-18 07:09

我有一个这样的类

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() 方法

为什么这仍然返回 u'A' 而不是 u'AA' 呢?

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

我本来以为这和下面的情况是一样的

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

1 个回答

5

我觉得这是一个(小)文档错误。str.format 方法在格式字符串中如果你使用了 !s,它会调用 str,但是 unicode.format 方法却会调用 unicode

这些文档可能是以 Python 3 为基础写的,因为在 Python 3 中,所有字符串都是 Unicode 类型,并且 !s 总是调用 str。整个新的格式化系统是从 Python 3.0 移植到 Python 2.6 的,所以文档中出现一些模糊不清的地方也不奇怪。

撰写回答