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

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

如下:

 

[python] view plain copy
 
 print?
  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  


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

 

比如:

 

[python] view plain copy
 
 print?
  1. dictDemo1 = {"key0":"value0"}  
  2. print(dictDemo1["key0"]) #value0  


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

 

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

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

 __len__ 如下:

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

 

[python] view plain copy
 
 print?
  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  


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

posted @ 2017-07-28 19:00  天涯海角路  阅读(184)  评论(0)    收藏  举报