鱼C论坛

 找回密码
 立即注册
查看: 1755|回复: 0

[学习笔记] A-22-定制容器

[复制链接]
发表于 2018-7-18 20:54:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #

  2. #知识点
  3. """
  4. 1. 容器的魔法方法:
  5. __len__(self): 定义当被 len() 调用时的行为(返回容器中元素的个数)
  6. __getitem__(self, key): 定义获取容器中指定元素的行为,相当于 self[key]
  7. __setitem__(self, key, value): 定义设置容器中指定元素的行为,相当于 self[key] = value
  8. __delitem__(self, key): 定义删除容器中指定元素的行为,相当于 del self[key]
  9. __iter__(self): 定义当迭代容器中的元素的行为
  10. __reversed__(self): 定义当被 reversed() 调用时的行为
  11. __contains__(self, item): 定义当使用成员测试运算符(in 或 not in)时的行为


  12. 2. Python 允许我们自己定制容器,如果你想要定制一个不可变的容器(String): 就不能定义像 __setitem__() 和 __delitem__() 这些会修改容器中的数据的方法。

  13. 3. 若要定制可变的容器, 则要加上__setitem__()和__delitem__()这两个方法"""

  14. class  Count(list):
  15.     def  __init__(self, *args):
  16.         super().__init__(args)
  17.         self.count = [0 for x in range(len(args))]

  18.     def  __len__(self):
  19.         super().__len__()

  20.     def  __getitem__(self, key):
  21.         self.count[key] += 1
  22.         return  super().__getitem__(key)

  23.     def  __setitem__(self, key, value):
  24.         self.count[key] += 1
  25.         super().__setitem__(key, value)

  26.     def  __delitem__(self, key):
  27.         del  self.count[key]
  28.         super().__delitem__(key)

  29.     def  reverse(self):
  30.         self.count.reverse()
  31.         super().reverse()

  32.     def  append(self, value):
  33.         self.count.append(0)
  34.         super().append(value)

  35.     def  extend(self, values):
  36.         for  x in values:
  37.             self.count.append(0)
  38.         super().extend(values)

  39.     def  insert(self, index, value):
  40.         self.count.insert(index, 0)
  41.         super().insert(index, value)

  42.     def  pop(self, index = -1):
  43.         del self.count[index]
  44.         return super().pop(index)

  45.     def  remove(self, value):
  46.         key = self.index(value)
  47.         del self.count[key]
  48.         super().remove(value)

  49.     def  clear(self):
  50.         self.count.clear()
  51.         super().clear()

  52.     def  counter(self, key):
  53.         return self.count[key]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 00:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表