定制容器

容器类型的协议:

定制不可变容器,只需要定义__len__()和__getitem__()方法

定制可变容器,需要定义__len__()、__getitem__()、__setitem__()和_delitem__()方法

__len__(self): 定义当被len()调用时的行为,返回容器中的个数

__getitem__(self,key): 定义获取容器中指定元素的行为,相当于self[key]

__setitem__(self,key,value): 定义设置容器中指定元素的行为,相当于self[key]=value

__delitem__(self,key): 定义删除容器中指定元素的行为,相当于del self[key]

>>>class CountList(list):
  def __init__(self, *args):
    super().__init__(args)
    self.count = []
    for i in args:
      self.count.append(0)
  def __len__(self):
    return len(self.count)
  def __getitem__(self, key):
    self.count[key] += 1
    return super().__getitem__(key)
  def __setitem__(self,key,value):
    self.count[key] += 1
    super().__setitem__(key,value)
  def __delitem__(self,key):
    del self.count[key]
    super().__delitem__(key)
  def counter(self,key):
    return self.count[key]
  def append(self,value):
    self.count.append(0)
    super().append(value)
  def pop(self,key):
    del self.count[key]
    return super().pop(key)
  def remove(self,value):
    key=super().index(value)
    del self.count[key]
    super().remove(value)
  def insert(self,key,value):
    self.count.insert(key,0)
    super().insert(key,value)
  def clear(self):
    self.count.clear()
    super().clear()
  def reverse(self):
    self.count.reverse()
    super().reverse()

最新文章

  1. LeetCode 22. Generate Parentheses
  2. CEGUI环境配置
  3. Hangfire项目实践
  4. Unreal模型文件调查
  5. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】
  6. Android基础总结(12)——XML和JSON解析
  7. weblogic启动问题
  8. Document原来可以这样来获取DOM
  9. PropertyGrid—添加属性Tab
  10. 使用require.js和backbone实现简单单页应用实践
  11. Android检查更新下载安装
  12. NewLife.XCode 上手指南2018版(一)代码生成
  13. java开发中的Mutex vs Semaphore
  14. readonly与disabled的区别
  15. Android学习第7天
  16. vb.bet 控件
  17. 【CF717G】Underfail 费用流
  18. day0315 迭代器
  19. 解决iScroll横向滚动区域无法拉动页面的问题
  20. Navi.Soft31.Mobile框架(含下载地址)

热门文章

  1. 用eclipse怎么打war包?
  2. 关于MKNetworking自己维护
  3. Qt Creator的初步使用
  4. Spring Boot 支持https
  5. 410-基于XCVU9P+ C6678的40G光纤的加速卡
  6. Educational Codeforces Round 68 (Rated for Div. 2) C. From S To T (字符串处理)
  7. qthread线程
  8. [每日一学]apache camel|BDD方式开发apache camel|Groovy|Spock
  9. JVM 常量池、运行时常量池、字符串常量池
  10. 如何判断系统是32位还是64位的linux系统