为什么str在Python中没有__radd__方法?

时间:2010-02-06 14:02:41

标签: python implementation

str还有其他方法,如__rmod __,__ rsub __或__rmul __

int确实有一个__radd__方法

很奇怪,我想知道原因。

第一个术语HAS添加方法时调用的示例radd beeing:

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

2 个答案:

答案 0 :(得分:5)

当第一个添加项未实现__radd__时,将使用

__add__。在int的情况下,加法由其数学定义很好地定义,因此int试图将另一个术语强制转换为数字。

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

答案 1 :(得分:1)

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

>>> 4 * 'abc'
'abcabcabcabc'

我不确定为什么需要__rmod__,但它与格式化有某种关系。也许它可以简化使用单个参数实现格式化,如"Hello %s" % 'world'中所示。我不确定。与您的断言相反,str对象上没有__rsub__

简而言之,这些方法只有在他们真正做某事时才会定义。