Python笔记(二十七)_魔法方法_容器
2024-09-04 01:27:10
定制容器
容器类型的协议:
定制不可变容器,只需要定义__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()
最新文章
- LeetCode 22. Generate Parentheses
- CEGUI环境配置
- Hangfire项目实践
- Unreal模型文件调查
- 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】
- Android基础总结(12)——XML和JSON解析
- weblogic启动问题
- Document原来可以这样来获取DOM
- PropertyGrid—添加属性Tab
- 使用require.js和backbone实现简单单页应用实践
- Android检查更新下载安装
- NewLife.XCode 上手指南2018版(一)代码生成
- java开发中的Mutex vs Semaphore
- readonly与disabled的区别
- Android学习第7天
- vb.bet 控件
- 【CF717G】Underfail 费用流
- day0315 迭代器
- 解决iScroll横向滚动区域无法拉动页面的问题
- Navi.Soft31.Mobile框架(含下载地址)
热门文章
- 用eclipse怎么打war包?
- 关于MKNetworking自己维护
- Qt Creator的初步使用
- Spring Boot 支持https
- 410-基于XCVU9P+ C6678的40G光纤的加速卡
- Educational Codeforces Round 68 (Rated for Div. 2) C. From S To T (字符串处理)
- qthread线程
- [每日一学]apache camel|BDD方式开发apache camel|Groovy|Spock
- JVM 常量池、运行时常量池、字符串常量池
- 如何判断系统是32位还是64位的linux系统