Python自定义列表类 - 切片自我

时间:2015-11-25 14:58:44

标签: python list python-3.x subclass

我有以下自定义类,当它的长度大于5时,它会截断自身。当单步执行代码时,切片操作会发生,但是当控制返回给调用者时,存储的topFiveList实例保持长度> 5.我在这里做错了什么?

class topFiveList(list):
    def add(self, key, value):
        index = -1
        for i, pair in enumerate(self):
            if pair[1] < value:
                index = i
                break
        if index == -1:
            self.append([key, value])
        else:
            self.insert(index, [key, value])
        if len(self) > 5:
            self = self[:5]

testvals = [['six', 6], ['one',1], ['five',5], ['nine', 9], ['three',3], ['four', 4], ['seven', 7]]
topFive = topFiveList()
for text, value in testvals:
    topFive.add(text, value)

1 个答案:

答案 0 :(得分:3)

self = self[:5]不修改self实例,它只是将局部变量self绑定到创建的切片self[:5]

但是,您可以使用切片分配。

self[:] = self[:5]

self[5:] = []

都达到了同样的效果。

第一个选项将self的内容替换为self[:5]。 OTOH第二个选项将从第5位开始删除所有内容。