Python __len__()__reversed__()__contains__()

Posted 一颗桃子t

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python __len__()__reversed__()__contains__()相关的知识,希望对你有一定的参考价值。

__len__():当使用len(A)该对象时调用该方法,当没有该方法是会报错,且返回数据不为整数也会报错
  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))
输出:
  1.  
    __len__
  2.  
    10

 

__reversed__():当使用reversed函数翻转对象时调用

  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))
输出:
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

__contains__():当使用in,not in 对象的时候 调用(not in 是在in完成后再取反,实际上还是in操作)
  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 3 in A(10):print "True"
  16.  
    else:print False
  17.  
    if 3 not in A(10):print "True"
  18.  
    else:print False
输出:
  1.  
    __contains__:3 is in?
  2.  
    True
  3.  
    __contains__:3 is in?
  4.  
    False




以上是关于Python __len__()__reversed__()__contains__()的主要内容,如果未能解决你的问题,请参考以下文章

python中的__iter__ __reversed__ __next__

关于python鸭子类型和白鹅类型

内建函数的重写

为啥列表有 __reverse__() 特殊方法但元组在 Python 中没有?

为啥 Python 的 'len' 函数比 __len__ 方法快?

python进阶五(定制类)5-3python中__len__