Python __len__()、__reversed__()、__contains__() (十二)

__len__():當使用len(A)該對象時調用該方法,當沒有該方法是會報錯,且返回數據不爲整數也會報錯
class A(object):
    def __init__(self,num):
        self.num = num
        self.start_num = -1
    
    def __len__(self):
        '''
        @summary: 當使用len(Test)該對象時調用該方法,當沒有該方法是會報錯,且返回數據不爲整數也會報錯
        '''
        print "__len__"
        return self.num - self.start_num - 1
    
if __name__ == "__main__":
    print len(A(10))
         
輸出:
__len__
10


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

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

__contains__():當使用in,not in 對象的時候 調用(not in 是在in完成後再取反,實際上還是in操作)
class A(object):
    def __init__(self,num):
        self.num = num
    
    def __contains__(self, item):
        '''
        @summary:當使用in,not in 對象的時候 ,not in 是在in完成後再取反,實際上還是in操作
        '''
        print "__contains__:%s is in?"%item
        if item < self.num and item >= 0:
            return True
        return False
    
if __name__ == "__main__":
    if 3 in A(10):print "True"
    else:print False
    if 3 not in A(10):print "True"
    else:print False
輸出:
__contains__:3 is in?
True
__contains__:3 is in?
False




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章