Ihre ursprüngliche Frage hatte eine Liste als Index übergeben, so schrieb ich dies unter der Annahme, dass Sie das (i, j)
te Element einer 2D-Liste zugreifen wollte. Sie können das tun, indem Sie Ihre Klasse mit so etwas wie definieren:
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
Hier werden Sie eine Überlastung der __getitem__
und __setitem__
Methoden, um das (i, j)
te Element in Ihrer values
Liste abrufen oder einstellen, wenn Sie eine Liste des Indizes [i, j]
passieren. Wenn Ihre Werte nur Zahlen sind, fügt die Syntax myCollection([1, 1]) += 10
10
zu values[1][1]
hinzu. Wenn Sie in Ihrem Objekt nicht einfach Zahlen speichern, müssen Sie möglicherweise die Methode __add__
oder __iadd__
überschreiben, unabhängig davon, in welcher Klasse Ihre Daten enthalten sind, um das gewünschte Verhalten zu erhalten.
Testen meine Beispielklasse:
>> 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
Die documentation on special method names gibt Ihnen alles, was Sie so wissen, über spezielle Methoden wünschen kann. Es kann ein guter Ort zum Suchen sein, wenn Sie nicht sicher sind, welche Methode Sie möglicherweise überladen müssen.
Was soll dieser Code tun? Sets sind nicht hashbar und können nicht auf diese Weise verwendet werden, und selbst wenn Sie meinen, meineCollection ist eine Liste, die nur einen Satz mit zwei Elementen enthält, kann ich nicht verstehen, wie Sie meinen, dass diese Operation abgeschlossen ist. –
bearbeitet das Beispiel, um Ergebnisse zu erklären, die ich erwarte. Der Index wurde als Liste entfernt und durch ein einfaches int ersetzt. – David
Danke, Redakteure. Das ist jetzt eine gut aussehende Frage! –