2010-02-06 26 views
3

海峽有其他的方法,如__rmod__,__rsub__或__rmul__爲什麼str在Python中沒有__radd__方法?

INT也有__radd__方法

奇怪的,我想知道這是爲什麼。

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

回答

5

__radd__是當添加的第一項不實現__add__用於:當第一項HAS添加方法

例RADD beeing調用。在int的情況下,加法由其數學定義明確定義,所以int試圖將另一個項強制爲一個數。

str,沒有這樣明確的含義,python的開發者已經決定沒有明顯的需要有一些東西+「一個字符串」。

+0

你確定嗎?在添加到問題中的示例中使用了\ _ \ _ radd__,並且第一個術語具有\ _ \ _ add__。 – 2010-02-06 15:17:09

+0

在str + STR的特定情況下,STR是str的一個子類,因爲它提供了一個更具體的方法,所以它優先用於str .__ add__ – SingleNegationElimination 2010-02-06 16:49:18

+0

您能爲我解釋一下嗎? – 2010-02-06 17:12:44

1

類型只定義它們使用的方法。由於可以添加到字符串的唯一對象是其他字符串或unicode對象,因此不需要一般的方法__radd____rmul__讓你重複的字符串:

>>> 4 * 'abc' 
'abcabcabcabc' 

我爲什麼需要__rmod__不知道,但它以某種方式與格式。也許它簡化了使用單個參數的格式化的實現,如在"Hello %s" % 'world'中。我不確定。與你的斷言相反,str對象上沒有__rsub__

簡而言之,這些方法只有在他們實際上做了某些事情時才被定義。

相關問題