|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第47讲:魔法方法:定制序列 第0题求助:
该题目是要实现一个可修改的能够记录元素访问次数的序列
我的代码中用字典来记录元素访问次数{key = 序列中的元素值 : value = 访问次数}
现在有一个问题: del 一个元素的时候, 只能删除掉序列中的元素值,但是删除不掉counts字典里的键值对,如下图:
请问各位大神帮忙看一下 有哪些问题
代码如下:
- class CountList(list):
- def __init__(self, *args):
- super().__init__(args)
- self.counts = {}.fromkeys(self, 0)
- def __len__(self):
- return len(self.counts)
- def __getitem__(self, item):
- temp = super().__getitem__(item)
- self.counts[temp] += 1
- return temp
- def __setitem__(self, key, value):
- if key in self.counts:
- self.counts[key] += 1
- else:
- self.append(value)
- super().__setitem__(key, value)
- def __delete__(self, instance):
- self.counts.pop(super().__getitem__(instance))
- super().__delitem__(instance)
- def append(self, value):
- self.counts[value] = 0
- super().append(value)
复制代码
- class CountList(list):
- def __init__(self, *args):
- super().__init__(args)
- self.counts = {}.fromkeys(self, 0)
- def __len__(self):
- return len(self.counts)
- def __getitem__(self, item):
- temp = super().__getitem__(item)
- self.counts[temp] += 1
- return temp
- def __setitem__(self, key, value):
- if key in self.counts:
- self.counts[key] += 1
- else:
- self.append(value)
- super().__setitem__(key, value)
- def __delitem__(self, instance): # 你的问题出现在这里(用 __delitem__)
- self.counts.pop(super().__getitem__(instance))
- super().__delitem__(instance)
- def append(self, value):
- self.counts[value] = 0
- super().append(value)
-
- c = CountList(1, 2, 3, 4, 5)
- del c[3]
- print(c.counts)
- print(c)
复制代码- {1: 0, 2: 0, 3: 0, 5: 0}
- [1, 2, 3, 5]
复制代码
|
|