Python __len__()、__reversed__()、__contains__()


__len__():當使用len(A)該對象時調用該方法,當沒有該方法是會報錯,且返回數據不為整數也會報錯

[python]  view plain  copy
 
  1. class A(object):  
  2.     def __init__(self,num):  
  3.         self.num = num  
  4.         self.start_num = -1  
  5.       
  6.     def __len__(self):  
  7.         ''''' 
  8.         @summary: 當使用len(Test)該對象時調用該方法,當沒有該方法是會報錯,且返回數據不為整數也會報錯 
  9.         '''  
  10.         print "__len__"  
  11.         return self.num - self.start_num - 1  
  12.       
  13. if __name__ == "__main__":  
  14.     print len(A(10))  
  15.            

輸出:

[python]  view plain  copy
 
  1. __len__  
  2. 10  

 

__reversed__():當使用reversed函數翻轉對象時調用

[python]  view plain  copy
 
  1. class A(object):  
  2.     def __init__(self,num):  
  3.         self.num = num  
  4.       
  5.     def __reversed__(self):  
  6.         ''''' 
  7.         @summary: 當使用reversed函數翻轉對象時調用 
  8.         '''  
  9.         ret = []  
  10.         for i in range(self.num):  
  11.             ret.append(self.num - i-1)  
  12.         return ret  
  13.       
  14. if __name__ == "__main__":  
  15.     print reversed(A(10))  

輸出:

[python]  view plain  copy
 
  1. [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]  


__contains__():當使用in,not in 對象的時候 調用(not in 是在in完成后再取反,實際上還是in操作)

[python]  view plain  copy
 
  1. class A(object):  
  2.     def __init__(self,num):  
  3.         self.num = num  
  4.       
  5.     def __contains__(self, item):  
  6.         ''''' 
  7.         @summary:當使用in,not in 對象的時候 ,not in 是在in完成后再取反,實際上還是in操作 
  8.         '''  
  9.         print "__contains__:%s is in?"%item  
  10.         if item < self.num and item >= 0:  
  11.             return True  
  12.         return False  
  13.       
  14. if __name__ == "__main__":  
  15.     if in A(10):print "True"  
  16.     else:print False  
  17.     if not in A(10):print "True"  
  18.     else:print False  

輸出:

[python]  view plain  copy
 
    1. __contains__:is in?  
    2. True  
    3. __contains__:is in?  
    4. False  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM