如何在Python中覆盖[]运算符?

时间:2009-12-24 10:35:24

标签: python operator-overloading

在Python中覆盖类的[]运算符(下标表示法)的方法名称是什么?

3 个答案:

答案 0 :(得分:219)

您需要使用__getitem__ method

class MyClass:
    def __getitem__(self, key):
        return key * 2

myobj = MyClass()
myobj[3] #Output: 6

如果你要设置值,你也需要实现__setitem__ method,否则会发生这种情况:

>>> myobj[5] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute '__setitem__'

答案 1 :(得分:47)

要完全超载它,您还需要实施__setitem____delitem__方法。

修改

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

http://docs.python.org/reference/datamodel.html

中记录了所有内容

答案 2 :(得分:11)

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