首页 > 解决方案 > 在 python 上覆盖 __getitem__

问题描述

我想覆盖__getitem__一个类的方法。我知道有类似的问题,但我想更准确和清楚。我如何使这项工作:

class A:
    def __init__(self, l: list): self.l = l
    def __getitem__(self, i: int): return self.l[i]

l = [1,2,3,4,5]
a = A(l)
a[3]
>> 4

所以这按预期工作,现在我想创建修改行为的 B 类__getitem__

class B(A):
    def __getitem__(self, i: int):
        return super()[i]+1

b = B(l)
b[3]
>> ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-172-77fe0ff98a6a> in <module>
      1 b = B(l)
----> 2 b[3]

<ipython-input-165-7856a4b2c20b> in __getitem__(self, i)
      1 class B(A):
      2     def __getitem__(self, i):
----> 3         return super()[i]+1

TypeError: 'super' object is not subscriptable

可能我犯了一个非常愚蠢的错误,但如果我用一个名为的方法做同样的事情,f它会按预期工作。

标签: pythonpython-3.x

解决方案


您必须在超级对象上显式调用该方法,使用:

return super().__getitem__(i) + 1

推荐阅读