如何覆盖[]操作符在Python?

在Python中重写类的[]操作符(下标符号)的方法的名称是什么?

162803 次浏览

你需要使用__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__'

你正在寻找__getitem__方法。参见http://docs.python.org/reference/datamodel.html,第3.4.6节

要完全重载它,你还需要实现__abc0和__delitem__方法。

编辑

我差点忘了……如果你想完全模拟一个列表,你还需要__getslice__, __setslice__ and __delslice__

它们都记录在http://docs.python.org/reference/datamodel.html