web-dev-qa-db-fra.com

Comment remplacer l'opérateur [] en Python?

Quel est le nom de la méthode pour remplacer le [] opérateur _ (notation en indice) pour une classe en Python?

182
Sahas

Vous devez utiliser le __getitem__ méthode .

class MyClass:
    def __getitem__(self, key):
        return key * 2

myobj = MyClass()
myobj[3] #Output: 6

Et si vous voulez définir des valeurs, vous devrez implémenter le __setitem__ méthode aussi, sinon cela se produira:

>>> myobj[5] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
236
Dave Webb

Pour le surcharger complètement, vous devez également implémenter le __setitem__et __delitem__ méthodes.

modifier

J'ai failli oublier ... si vous voulez imiter complètement une liste, vous avez également besoin de __getslice__, __setslice__ and __delslice__.

Tous sont documentés dans http://docs.python.org/reference/datamodel.html

51
Dave Kirby

Vous recherchez le __getitem__ méthode. Voir http://docs.python.org/reference/datamodel.html , section 3.4.6

11
Confusion