Qual è il nome del metodo per sovrascrivere l'operatore []
(notazione subscript) per una classe in Python?Come sovrascrivere l'operatore []?
120
A
risposta
164
È necessario utilizzare __getitem__
method.
>>> class MyClass:
... def __getitem__(self, key):
... return key * 2
...
>>> myobj = MyClass()
>>> myobj[3]
6
E se si sta andando ad essere l'impostazione dei valori di cui ha bisogno per attuare il __setitem__
method troppo, altrimenti questo accadrà:
>>> myobj[5] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
10
Stai cercando il metodo __getitem__
. Vedere http://docs.python.org/reference/datamodel.html, sezione 3.4.6
34
Per sovraccaricarlo è necessario anche implementare i metodi __setitem__
e __delitem__
.
modificare
quasi dimenticavo ... se si desidera emulare completamente un elenco, è inoltre necessario __getslice__, __setslice__ and __delslice__
.
ci sono tutti documentati in http://docs.python.org/reference/datamodel.html
'__getslice__,' '__setslice__' e __delslice__' sono stati deprecati per gli ultimi rilasci di ver 2.x (non so esattamente quando), e non sono più supportati in ver 3.x. Invece, usa '__getitem__'. '__setitem__' e' __delitem__ 'e verifica se l'argomento è di tipo 'slice', cioè:' if isinstance (arg, slice): ... –