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'
答案 0 :(得分:5)
__radd__
时,将使用 __add__
。在int
的情况下,加法由其数学定义很好地定义,因此int试图将另一个术语强制转换为数字。
str
,没有明确定义的含义,python的开发人员已经决定没有明显需要+“字符串”的东西。
答案 1 :(得分:1)
类型仅定义他们使用的方法。由于可以添加到字符串的唯一对象是其他字符串或unicode对象,因此不需要通用的__radd__
方法。 __rmul__
允许您复制字符串:
>>> 4 * 'abc'
'abcabcabcabc'
我不确定为什么需要__rmod__
,但它与格式化有某种关系。也许它可以简化使用单个参数实现格式化,如"Hello %s" % 'world'
中所示。我不确定。与您的断言相反,str对象上没有__rsub__
。
简而言之,这些方法只有在他们真正做某事时才会定义。