Réponses:
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__'
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
Vous recherchez la __getitem__
méthode. Voir http://docs.python.org/reference/datamodel.html , section 3.4.6
__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): ...