JiaJunll 发表于 2021-10-1 23:38:56

课后题求助 :第047讲:魔法方法:定制序列

第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 += 1
      return temp

    def __setitem__(self, key, value):
      if key in self.counts:
            self.counts += 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 = 0
      super().append(value)

傻眼貓咪 发表于 2021-10-2 09:35:41

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 += 1
      return temp

    def __setitem__(self, key, value):
      if key in self.counts:
            self.counts += 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 = 0
      super().append(value)
   
c = CountList(1, 2, 3, 4, 5)

del c

print(c.counts)

print(c){1: 0, 2: 0, 3: 0, 5: 0}

JiaJunll 发表于 2021-10-2 17:26:35

傻眼貓咪 发表于 2021-10-2 09:35


感谢大佬!
页: [1]
查看完整版本: 课后题求助 :第047讲:魔法方法:定制序列