<p>您最初的问题有一个作为索引传递的列表,因此我编写本文时假设您希望访问2D列表的第<code>(i, j)</code>元素。您可以通过以下方式定义类:</p>
<pre><code>class MyJavaCollection:
def __init__(self, values):
self.values = values
def __getitem__(self, indices):
"""
Returns the item at index (i, j) given an index list [i, j].
"""
return self.values[indices[0]][indices[1]]
def __setitem__(self, indices, value):
"""
Sets the (i, j)th item to the input value given an input
index list [i, j].
"""
self.values[indices[0]][indices[1]] = value
</code></pre>
<p>这里重载了<code>__getitem__</code>和<code>__setitem__</code>方法,以便在传递索引列表<code>[i, j]</code>时检索或设置<code>(i, j)</code>列表中的第<code>(i, j)</code>个元素。如果值只是数字,那么语法<code>myCollection([1, 1]) += 10</code>将<code>10</code>添加到<code>values[1][1]</code>。你知道吗</p>
<p>如另一个答案所述,如果您不只是在对象中存储数字,那么您可能需要覆盖数据所包含的任何类的<code>__add__</code>或<code>__iadd__</code>方法,以获得所需的行为。你知道吗</p>
<p>测试示例类:</p>
<pre><code>>> my_list = [[1, 2, 3], [4, 5, 6]]
>> my_list[1][1]
5
>> my_collect = MyJavaCollection(my_list)
>> my_collect[[1, 1]]
5
>> my_collect[[1, 1]] += 5
>> my_collect[[1, 1]]
10
</code></pre>
<p><a href="https://docs.python.org/3/reference/datamodel.html#special-method-names" rel="nofollow">documentation on special method names</a>提供了您想知道的关于这种特殊方法的所有信息。如果您不确定需要重载什么方法,那么它可能是一个搜索的好地方。你知道吗</p>