Answers:
您需要使用__getitem__
方法。
class MyClass:
def __getitem__(self, key):
return key * 2
myobj = MyClass()
myobj[3] #Output: 6
如果要设置值,则也需要实现该__setitem__
方法,否则会发生这种情况:
>>> myobj[5] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'
要完全重载它,您还需要实现__setitem__
和__delitem__
方法。
编辑
我差点忘了...如果您想完全模仿一个列表,则还需要__getslice__, __setslice__ and __delslice__
。
您正在寻找__getitem__
方法。参见http://docs.python.org/reference/datamodel.html第3.4.6节
__getslice__,
__setslice__`和__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__`和__delitem__' and test if the argument is of type
切片, i.e.:
如果isinstance(阿根廷,片):...