Pthon魔术方法(Magic Methods)-容器相关方法

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.容器相关方法汇总

  __len__:
    内建函数len(),返回对象的长度(>=0的整数),如果把对象当作容器类型看,就如同list或者dict。
    bool()函数调用的时候,如果没有__bool__()方法,则会看__len__()方法是否存在,存在返回非0为真。   __iter__:
    迭代容器时,调用,返回一个新的迭代器对象。   __contains__:
    in成员运算符,没有实现,就调用__iter__方法遍历   __getitem__:
    实现self[key]访问。序列对象,key接受整数位索引,或者切片。对于set和dict,key为hashable。key不存在引发KeyError异常。   __settitem__:
    和__getitem__的访问类似,是设置值的方法。   __missing__:
    字典或者子类使用__getitem__()调用时,key不存在执行该方法。

二.案例展示

1>.__missing__案例展示

 #!/usr/bin/env python
#_*_conding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie class A(dict):
def __missing__(self, key):
print("Missing key : {}".format(key))
return 0 a = A()
print(a["name"]) #以上代码执行结果如下:
Missing key : name
0

2>.将购物车类改造成方便操作的容器类案例

 #!/usr/bin/env python
#_*_conding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie class Cart:
def __init__(self):
self.items = [] def __len__(self):
return len(self.items) def additem(self,item):
self.items.append(item) def __iter__(self):
yield from self.items def __getitem__(self, index): #索引访问
return self.items[index] def __setitem__(self, key, value): #索引赋值
self.items[key] = value def __str__(self):
return str(self.items) def __add__(self, other): #算数运算符+
self.items.append(other)
return self cart = Cart()
cart.additem("Iphone 11")
cart.additem("康佳单反")
cart.additem("篮球") #长度,bool
print(len(cart))
print(bool(cart)) #迭代
for item in cart:
print(item) #in
print("篮球" in cart)
print("Iphone 11" in cart) #索引操作
print(cart[1])
cart[1] = "Jason Yin" #链式编程实现加法
print(cart + 100 + 200 + 300)
print(cart.__add__(2019).__add__(2120)) #以上代码执行结果如下:
3
True
Iphone 11
康佳单反
篮球
True
True
康佳单反
['Iphone 11', 'Jason Yin', '篮球', 100, 200, 300]
['Iphone 11', 'Jason Yin', '篮球', 100, 200, 300, 2019, 2120]

最新文章

  1. 【BZOJ-2938】病毒 Trie图 + 拓扑排序
  2. git乱码问题解决
  3. ListActivity的使用
  4. ARM学习篇一 点亮LED
  5. 【BZOJ-3757】苹果树 块状树 + 树上莫队
  6. Python之通过IP地址库获取IP地理信息
  7. 【BZOJ-1984】月下“毛景树” 树链剖分
  8. ArcGIS Server发布服务,报错00032
  9. 20145236 《Java程序设计》第4周学习总结
  10. Hosting Your Own NuGet Feeds
  11. Linux基础1之磁盘与分区
  12. 禁止鼠标多次点击选中div中的文字
  13. Python的tkinter和tkinter.messagebox应用-鼠标和键盘命令绑定
  14. MVC5模板部署到mono
  15. 《OpenCV3 计算机视觉--Python语言实现 第二版》源代码及纠错
  16. bash脚本条件测试总结
  17. vue中的页面渲染方案
  18. 解决Error:Could not determine the class-path for interface com.android.builder.model.AndroidProject.
  19. 用nodejs做一下发送邮件例子
  20. Python3 tkinter基础 Frame event.x 输出鼠标左右键点击的位置

热门文章

  1. jquery checkbox全选和取消
  2. 使用Win10自带的截图工具
  3. Jenkins - 分布式构建
  4. Dockerfile语法梳理
  5. 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式
  6. centos7双网卡绑定
  7. Spirng学习指南-第一章(完)
  8. openjudge4979 - 海贼王之伟大航路 题解
  9. 使用码云或GitHub搭建简单的个人网站
  10. Go 基本数据类型