tua domanda iniziale aveva una lista passata come l'indice, così ho scritto questo assumendo che si voleva accedere all'elemento esimo (i, j)
di una lista 2D. È possibile farlo definendo la classe con qualcosa di simile:
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
Qui si sono sovraccaricare il __getitem__
e __setitem__
metodi per recuperare o impostare l'elemento esimo (i, j)
nella vostra lista values
quando si passa un elenco di indici [i, j]
. Se i valori sono solo numeri, la sintassi myCollection([1, 1]) += 10
aggiunge 10
a values[1][1]
.
Come indicato in un'altra risposta, se non si è semplicemente memorizzare i numeri nel vostro oggetto, quindi potrebbe essere necessario sovrascrivere il metodo __add__
o __iadd__
su qualsiasi classe di tuo dati comprende per ottenere il comportamento desiderato.
Testare il mio esempio di classe:
>> 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
Il documentation on special method names ti dà tutto quello che si può desiderare di conoscere metodi speciali come questo. Può essere un buon posto per cercare se non sei sicuro di quale metodo potresti dover sovraccaricare.
Cosa deve fare questo codice? Gli insiemi sono inattuabili e non possono essere usati in questo modo, e anche se tu intendi che 'myCollection' è un elenco contenente solo un set di 2 elementi, non riesco a capire come intendi che si occupi di questa operazione. –
ha modificato l'esempio per spiegare i risultati che mi aspetto. Rimosso l'indice come lista e sostituito da un semplice int. – David
Grazie, editori. Questa è una bella domanda ora! –