Python3 魔法方法:定制序列,python3定制,1、基于序列的三大容
Python3 魔法方法:定制序列,python3定制,1、基于序列的三大容
1、基于序列的三大容器
分别是 列表、元组、字符串
2、协议
python中的协议更像是一种指南,例如鸭子类型,一只鸟像鸭子一样走,像鸭子一样叫,像鸭子一样游然后这只鸟就可以叫做鸭子
3、容器类型的协议
如果希望定制的容器是不可变的,那么只需要定义__len__ 和__getitem__ 方法
如果希望定制的容器是可变的,那么还需要定义 __setitem__ 和__delitem__方法
4、魔法方法
_len__(self) | 定义当被len()调用时的行为(返回容器中元素的个数) |
__getitem__(self, key) | 定义获取容器中指定元素的行为,相当于self[key] |
__setitem__(self, key, value) | 定义设置容器中指定元素的行为,相当于self[key] = value |
__delitem__(self, key) | 定义删除容器中指定元素的行为,相当于del self[key] |
例子:自定义一个列表类,完成list所有功能,并增counter(index)方法返回index对应值Mylist[index]的访问次数
class Mylist: def __init__(self,*args): self.mylist = [x for x in args] self.count={}.fromkeys(range(len(self.mylist)),0) print(self.mylist) def __len__(self): return len(self.mylist) def __getitem__(self,key): self.count[key]+=1 return self.mylist[key] def __setitem__(self,key,value): self.mylist[key]=value def __delitem__(self,key): self.mylist.remove( self.mylist[key]) del self.count[key] def append(self,value): self.mylist.append(value) self.count[len(self.mylist)-1]=0 def counter(self, key): return self.count[key] def pop(self): self.mylist.pop() self.count.pop(len(self.count)-1) def insert(self,index,value): keys=[] values=[] self.mylist.insert(index,value) for each_key in self.count.keys(): keys.append(each_key) keys.insert(index,index) for i in range(index+1,len(self.mylist)): keys[i]+=1 for i in range(len(keys)): self.count[keys[i]]=0 def clear(self): self.mylist.clear() self.count.clear() def reverse(self): keys=[] values=[] self.mylist.reverse() for each_key in self.count.keys(): keys.append(each_key) for each_val in self.count.values(): values.append(each_val) keys.reverse()#直接调用方法不能加等号 values.reverse()#直接调用方法不能加等号 self.count.clear() for i in range(len(keys)): self.count[keys[i]]=values[i]
Python3 魔法方法:定制序列
相关内容
- Python Appium 滑动、点击等操作,pythonappium,Python App
- [翻译] Python 3.5中async/await的工作机制,asyncawait,Python
- Selenium2+python自动化63-二次封装(click/send_kesy),selen
- Python测试工具——nose,pythonnose,1、nose 特点:
- 深度学习 GPU环境 Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 +
- python redis客户端使用lua脚本,redislua,有一个需求,为一
- python爬微博,python爬,# -*- codi
- Selenium2+python自动化57-捕获异常(NoSuchElementException),
- python如何获取多个excel单元格的值,pythonexcel,一. 获取多
- Python包和版本管理的最好工具----pipenv,python----pipenv,
评论关闭