2009-12-24 6 views

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__' 
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

+36

'__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): ... –