python %s 字符串替换和 "self"?

python %s string substitution and "self"?

在 pyyaml 文档中查看此代码,为什么 "Dice(%s,%s)" % self 有效?有两个 %s 但只有一个 var self?

>>> class Dice(tuple):
...     def __new__(cls, a, b):
...         return tuple.__new__(cls, [a, b])
...     def __repr__(self):
...         return "Dice(%s,%s)" % self

>>> print Dice(3,6)
Dice(3,6)

http://pyyaml.org/wiki/PyYAMLDocumentation#Constructorsrepresentersresolvers

Dicetuple 的派生 class,它是长度为 2 的 tuple

你可以看到

>>> print yaml.dump(Dice(3,6))

!!python/object/new:__main__.Dice
- !!python/tuple [3, 6]

因此在您的上下文中,它运行良好,它确实是一个长度为 2 的元组,因此可以解析所使用的字符串。