Wie lautet der Name der Methode zum Überschreiben des []
-Operators (Indexnotation) für eine Klasse in Python?Wie kann der Operator [] überschrieben werden?
120
A
Antwort
164
Sie müssen die __getitem__
method verwenden.
>>> class MyClass:
... def __getitem__(self, key):
... return key * 2
...
>>> myobj = MyClass()
>>> myobj[3]
6
Und wenn du gehst, Werte zu Einstellung Sie werden die __setitem__
method implementieren müssen, sonst wird dies geschehen:
>>> myobj[5] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
10
Sie sind für die __getitem__
Methode suchen. Siehe http://docs.python.org/reference/datamodel.html, Abschnitt 3.4.6
34
Um es vollständig zu überlasten, müssen Sie auch die Methoden __setitem__
und __delitem__
implementieren.
bearbeiten
ich fast vergessen ... wenn Sie völlig eine Liste emulieren wollen, müssen Sie __getslice__, __setslice__ and __delslice__
auch.
Es sind alle dokumentiert in http://docs.python.org/reference/datamodel.html
'__getslice__,' __setslice__' und '__delslice__‘ für die letzten Versionen von ver 2.x veraltet sind (nicht sicher, wann genau), und sind nicht mehr in ver unterstützt 3.x. Verwenden Sie stattdessen "__getitem__". '__setitem__' und' __delitem__ 'und testen, ob das Argument vom Typ 'slice' ist, d. h .:' ifinstance (arg, slice): ... –