宜兴通达竭诚为您服务。

python四个魔法方法__len__,__getitem__,__setitem__,__delitem__

2017-12-20 13:12:00     作者: Administrator     来源:互联网,版权归作者所有     浏览次数: 290     文字大小:【】【】【

python中除了可以使用内建的类型,如list,tuple,dict,还可以创建自己的对象来实现像这些内建类型的访问,不过需要在定义类的时候对一些魔法方法逐一实现。

如下:

  1. class DictDemo:  
  2.       def __init__(self,key,value):  
  3.             self.dict = {}  
  4.             self.dict[key] = value  
  5.       def __getitem__(self,key):  
  6.             return self.dict[key]  
  7.       def __setitem__(self,key,value):  
  8.             self.dict[key] = value  
  9. dictDemo = DictDemo('key0','value0')  
  10. print(dictDemo['key0']) #value0  
  11. dictDemo['key1'] = 'value1'  
  12. print(dictDemo['key1']) #value1  

上面的对象就相当于自己创建了一个内建类型相似的字典,当实例中有类似字典的操作的时候

比如:

  1. dictDemo1 = {"key0":"value0"}  
  2. print(dictDemo1["key0"]) #value0  

实例dictDemo["key0"]就类似上面的的操作,则会自动调用类中定义的方法__getitem__,输出在该方法返回的值

再看看dictDemo["key1"] = "value1",就是字典的操作,会自动调用类中定义的方法__setitem__,来设置相应的值

还有一个__del__,就是当我们要删除一个元素的时候调用(魔法方法会自动调用)

 __len__ 如下:

当要使用内建函数len(),而参数是DictDemo的实例的时候,那一定要实现类型中的__len__()方法

  1. class DictDemo:  
  2.     def __init__(self,key,value):  
  3.         self.dict = {}  
  4.         self.dict[key] = value  
  5.     def __getitem__(self,key):  
  6.         return self.dict[key]  
  7.     def __setitem__(self,key,value):  
  8.         self.dict[key] = value  
  9.     def __len__(self):  
  10.         return len(self.dict)  
  11. dictDemo = DictDemo('key0','value0')  
  12. print(dictDemo['key0']) #value0  
  13. dictDemo['key1'] = 'value1'  
  14. print(dictDemo['key1']) #value1  
  15. print(len(dictDemo)) #2  

上述就是这四个魔法方法的简单介绍。

相关文章 评论

服务原则及地区范围

宜兴通达团队,在企业网络维护和企业信息化建设与咨询方面,有10多年经验。

我团队愿与客户一道,力求彻底解决客户问题!
我们不是在给企业提供“头痛医头、脚痛医脚”的暂时解决方案,而是在部署根本性安全与稳定服务!!
我们愿携手客户,建立企业IT规划;杜绝随意安装系统、软件等操作;力求共同维护有序、安全、稳定的网络办公环境!!!
IT服务,服务是根本,客户是上帝;我们提供快速响应、快速上门、快速排查,提供优质高效的服务!!!!

通达团队提供全国范围内的服务,服务形式包括远程协助、电话咨询、电子邮件咨询、传真咨询、问答平台的问题解决等。

宜兴地区提供上门服务:

  • 市区服务:宜城街道、城北街道(屺亭街道)、新街街道、新庄街道、环科园、渚桥开发区
  • 市郊服务:张渚镇、西渚镇、太华镇、徐舍镇、官林镇、杨巷镇、新建镇、和桥镇、高塍镇、万石镇、周铁镇、芳桥镇、丁蜀镇、湖父镇。
  • 联系电话:189-21-343434
  • 在线沟通: