Odpowiedzi:
Musisz użyć tej __getitem__
metody .
class MyClass:
def __getitem__(self, key):
return key * 2
myobj = MyClass()
myobj[3] #Output: 6
A jeśli zamierzasz ustawiać wartości, musisz także zaimplementować tę __setitem__
metodę , w przeciwnym razie tak się stanie:
>>> myobj[5] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
Aby całkowicie go przeciążyć, musisz również wdrożyć metody __setitem__
i __delitem__
.
edytować
Prawie zapomniałem ... jeśli chcesz całkowicie naśladować listę, potrzebujesz również __getslice__, __setslice__ and __delslice__
.
Wszystkie są udokumentowane w http://docs.python.org/reference/datamodel.html
Szukasz __getitem__
metody. Zobacz http://docs.python.org/reference/datamodel.html , sekcja 3.4.6
__getslice__,
__setslice__` i__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__` i__delitem__' and test if the argument is of type
plasterek, i.e.:
jeśli isinstance (arg, slice): ...