python - 在 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
它会按预期工作。
解决方案
您必须在超级对象上显式调用该方法,使用:
return super().__getitem__(i) + 1
推荐阅读
- c# - system.drawing.image 中的“System.OutOfMemoryException”
- android - 为什么线性布局 maxHeight 不起作用?
- azure-functions - Azue Function V2 - 事件中心触发器不尊重主机配置 maxBatchSize
- kubernetes - 通过 kubernetes 注释进行 Traefik 健康检查
- logging - Logback:是否可以将 TimeBasedRollingPolicy 与 SizeBasedTriggeringPolicy 结合使用?
- java - RadioGroup 中的 RecyclerView 和 RadioButton
- javascript - 如何从 ajax 获取数据 - JS & Jquery
- powershell - 在 PowerShell 中比较多个 CSV 列并从两者返回完整数据
- python - Python / Pandas 中的 R 向量语法
- c++ - 将多个参数传递给 operator[]