2 回答

TA贡献1852条经验 获得超7个赞
您需要覆盖该__getitem__方法:
class AudioBuffer(list):
def __init__(self, *args, **kwargs):
super(AudioBuffer, self).__init__(*args, **kwargs)
def __getitem__(self, key):
return AudioBuffer(list.__getitem__(self, key))
def methodFromAudioBuffer(self):
print("my list is", self)
>>> foo = AudioBuffer([15, 25, 35])
>>> foo[1:].methodFromAudioBuffer()
my list is [25, 35]
在将序列子类化为子类时,也推荐使用collections.MutableSequence。

TA贡献1725条经验 获得超7个赞
您需要实施__getitem__(self, key)
并返回您的课程。
来自 Python 文档:
调用以实现对 self[key] 的评估。对于序列类型,接受的键应该是整数和切片对象。请注意,负索引的特殊解释(如果类希望模拟序列类型)取决于getitem () 方法。如果 key 的类型不合适,可能会引发 TypeError;如果序列的索引集之外的值(在对负值进行任何特殊解释之后),则应该引发 IndexError 。对于映射类型,如果缺少 key(不在容器中),则应引发 KeyError。
当您调用obj[0]
它时,这是obj.__getitem__(0)
. 因此,只需覆盖__getitem__
您的类以返回您的类的实例。
添加回答
举报