3

str 有其他方法,如 __rmod__、__rsub__ 或 __rmul__

int 确实有一个 __radd__ 方法

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

第一项具有添加方法时调用的示例 radd beeing:

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

2 回答 2

5

__radd__当加法的第一项没有实现时使用__add__。在 的情况下int,加法由其数学定义很好地定义,因此 int 试图将其他项强制转换为数字。

with str, 没有这么明确的含义,python 的开发人员已经决定没有明显的需要有一些东西+“字符串”。

于 2010-02-06T14:34:56.207 回答
1

类型只定义它们使用的方法。由于唯一可以添加到字符串的对象是其他字符串或 unicode 对象,因此不需要通用__radd__方法。 __rmul__允许您复制字符串:

>>> 4 * 'abc'
'abcabcabcabc'

我不确定为什么__rmod__需要,但它与格式有关。也许它使用单个参数简化了格式化的实现,如"Hello %s" % 'world'. 我不确定。与您的断言相反,__rsub__str 对象上没有。

简而言之,这些方法只有在它们实际做某事时才被定义。

于 2010-02-06T14:39:56.653 回答