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

225

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

Sahas
la source

Réponses:

290

Vous devez utiliser la __getitem__méthode .

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

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

Et si vous allez définir des valeurs, vous devrez également implémenter la __setitem__méthode , 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__'
Dave Webb
la source
63

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

Éditer

J'ai presque oublié ... si vous voulez émuler complètement une liste, vous en avez également besoin __getslice__, __setslice__ and __delslice__.

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

Dave Kirby
la source
67
__getslice__, __setslice__` et __delslice__' have been deprecated for the last few releases of ver 2.x (not sure exactly when), and are no longer supported in ver 3.x. Instead, use __getitem__ . __setitem__` et __delitem__' and test if the argument is of type tranche , i.e.: si isinstance (arg, tranche): ...
Don O'Donnell