为什么字符串在Python中没有__radd__方法?

5 投票
2 回答
783 浏览
提问于 2025-04-15 18:58

字符串(str)还有其他一些方法,比如 __rmod__、__rsub__ 或 __rmul__。

整数(int)确实有一个 __radd__ 方法。

这很奇怪,我想知道这是为什么。

下面是一个例子,展示当第一个项有加法方法时,__radd__ 是如何被调用的:

>>> class STR(str):
...     def __radd__(self, other):
...             print "jeje"
...             return other.__add__(self)
... 
>>> 'aaaaa' + STR('bbbbb')
jeje
'aaaaabbbbb'

2 个回答

2

类型只定义它们使用的方法。因为只有字符串或者unicode对象可以被添加到字符串中,所以不需要一个通用的 __radd__ 方法。__rmul__ 方法可以让你复制字符串:

>>> 4 * 'abc'
'abcabcabcabc'

我不太明白 __rmod__ 方法的必要性,但它和格式化有关系。也许它让用单个参数进行格式化变得更简单,比如 "Hello %s" % 'world'。我不太确定。与您的说法相反,字符串对象上并没有 __rsub__ 方法。

总之,这些方法只有在实际有用的时候才会被定义。

5

__radd__ 是在加法的第一个数没有实现 __add__ 时使用的。以 int(整数)为例,加法在数学上是有明确定义的,所以整数会尝试把另一个数转换成数字。

而对于 str(字符串),没有这样的明确含义,Python 的开发者认为没有必要让数字和字符串进行加法,比如说数字 + "一个字符串"。

撰写回答