2016-03-25 19 views
0

要定義在下面的語句一類行爲:+ =在python運營商__setitem__(除了在原地方括號中)

my_object[item] = ... 

我知道我需要定義__setitem__方法。

我需要什麼樣的方法來定義下面的語句:

my_object[item] += ... 
+0

您正在尋找'__iadd__'我相信。 – idjaw

+0

這個問題已被回答[之前](http://stackoverflow.com/questions/1047021/overriding-in-python-iadd-method) – Hang

+1

沒有'__isetitem__'這樣的事情。對於'my_object [...]',你可以定義'__setitem__'和'__getitem__',但是要讓'my_object [item] + = ...'不同於'my_object [item] = my_object [item] + .. .',你需要修改'my_object [item]'是一個實例的類。 – zondo

回答

4

my_object需要__getitem__檢索my_object[item]__setitem__的初始值以設置新值。

此外,Python需要一種方法來執行添加。 my_object[item]需要執行與__add____iadd__的添加,或者+=右側的對象需要實現__radd__

1

__setitem__將覆蓋你對於你的容器類;當你做任何擴展的任務時,就像調用常規任務一樣。據你的班級所知,x[i] += 1x[i] = x[i] + 1之間沒有區別。

如果您需要從=-=區別對待+=,這是由項目的類的特殊方法處理。