2010-11-03 35 views
2

我知道這是不好的做法:python int沒有__iadd __()方法?

>>> a = 5 
>>> a.__radd__(5) 
10 
>>> a 
5 
>>> a.__iadd__(5) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'int' object has no attribute '__iadd__' 

出於好奇,如果一個int對象沒有__iadd__,那麼如何做+=工作?

回答

5

出於好奇,如果int對象沒有__iadd__,那麼+ =如何工作?

a += 5 

變爲

a = a + 5 

因爲沒有__iadd__爲不可變對象。

這是(實際上)

a = a.__add__(5) 

而且很好地工作。一個新的int對象由__add__創建。

一些規則在這裏http://docs.python.org/reference/datamodel.html#coercion-rules

+3

這當然是因爲整數是不可變的,也就是說整數對象無法自增。 – delnan 2010-11-03 15:37:11

+0

'a + = 5'不會變成'a = a + 5'。它可以調用'__add__',但只有在__iadd__不存在的時候(就像Paulo Scardino所說的那樣)。 – 2010-11-03 15:39:34

+1

@Thomas Wouters:它可能並不總是被轉換成它,但它確實適用於OP詢問的情況,即「如果一個'int'對象沒有'__iadd__',那麼'+ ='是如何工作的?」 - 和其他具有'__add__'方法的不可變類型一樣。 – martineau 2010-11-03 17:11:18

3

如果一個對象沒有__iadd____add__將被使用。方法__iadd__被認爲是在__add__情況下優化的,它不是強制性的。

相關問題