Wie überschreibe ich den Operator [] in Python?

225

Wie heißt die Methode zum Überschreiben des []Operators (Indexnotation) für eine Klasse in Python?

Sahas
quelle

Antworten:

290

Sie müssen die __getitem__Methode verwenden .

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

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

Und wenn Sie Werte festlegen möchten, müssen Sie die __setitem__Methode auch implementieren , da sonst Folgendes passiert:

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

Um es vollständig zu überladen, müssen Sie auch die Methoden __setitem__und implementieren __delitem__.

bearbeiten

Ich hätte fast vergessen ... wenn Sie eine Liste vollständig emulieren möchten, brauchen Sie auch __getslice__, __setslice__ and __delslice__.

Es sind alle in http://docs.python.org/reference/datamodel.html dokumentiert

Dave Kirby
quelle
67
__getslice__, __setslice__` und __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__` und __delitem__' and test if the argument is of type Slice , i.e.: if isinstance (arg, Slice): ...
Don O'Donnell