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

350 投票
3 回答
191812 浏览
提问于 2025-04-15 17:20

在Python中,想要重写类的[]操作符(也就是用方括号来访问元素),这个方法叫什么名字呢?

3 个回答

24

你在找 __getitem__ 这个方法。可以查看这个链接:http://docs.python.org/reference/datamodel.html,在第3.4.6节里有详细介绍。

90

要让这个功能完全发挥作用,你还需要实现 __setitem____delitem__ 这两个方法。

补充说明

我差点忘了……如果你想要完全模仿一个列表,还需要 __getslice____setslice____delslice__ 这几个方法。

这些内容都有详细的说明,可以在 http://docs.python.org/reference/datamodel.html 找到。

449

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

撰写回答