Antworten:
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__'
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
Sie suchen nach der __getitem__
Methode. Siehe http://docs.python.org/reference/datamodel.html , Abschnitt 3.4.6
__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): ...