如何在Python中重载[]运算符?

341

在Python中,用于重载类的[]运算符(下标符号)的方法名是什么?

3个回答

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

88
为了完全重载它,你还需要实现__setitem____delitem__方法。
编辑:
我差点忘记了...如果您想完全模拟一个列表,还需要__getslice__,__setslice__和__delslice__
这些都在http://docs.python.org/reference/datamodel.html中进行了文档记录。

95
“__getslice__”,“__setslice__”和“__delslice__”自几个 ver 2.x 版本之前就已经被弃用了(不确定是哪个版本),在 ver 3.x 中已不再支持。现在应该使用“__getitem__”,“__setitem__”和“__delitem__”,并测试参数是否为“slice”类型,例如:如果 isinstance(arg,slice):... - Don O'Donnell

23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接