<p>请注意<code>myCollection[0] += 10.;</code>的解释如下:</p>
<pre><code>myCollection.__setitem__(0, myCollection.__getitem__(0).__iadd__(10.))
</code></pre>
<p>因此,要完成这项工作,您需要实施:</p>
<ul>
<li><code>__getitem__</code>和<code>__setitem__</code>在<code>MyJavaCollection</code>上;和</li>
<li><code>__iadd__</code>(或者<code>__add__</code>,如果<code>__iadd__</code>没有实现的话,Python会退回到这个位置)在<em>上,不管<code>.__getitem__</code>返回的是什么,而不是<code>MyJavaCollection</code>本身-如果它返回的是已经实现了加法的东西,比如你的例子中的<code>float</code>,你就没事了。你知道吗</li>
</ul>
<hr/>
<p>快速演示:</p>
<pre><code>>>> class Container(object):
def __init__(self, contained):
self.contained = contained
def __getitem__(self, key):
print "Container.__getitem__"
return self.contained
def __setitem__(self, key, val):
print "Container.__setitem__"
self.contained = val
>>> class Contained(object):
def __add__(self, other):
print "Contained.__add__"
return "foo"
>>> test = Container(Contained())
>>> test[0] += 1
Container.__getitem__
Contained.__add__
Container.__setitem__
>>> test.contained
'foo'
</code></pre>