为什么字符串在Python中没有__radd__方法?
字符串(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 的开发者认为没有必要让数字和字符串进行加法,比如说数字 + "一个字符串"。