Python __len__()、__reversed__()、__contains__()(十二)
__len__():len(A)オブジェクトを使用する場合に呼び出され、メソッドがない場合はエラーが報告され、返されるデータが整数でなくてもエラーが報告されます.
__reversed__():reversed関数を使用してオブジェクトを反転するときに呼び出されます.
__contains__():in,not inオブジェクトを使用する場合に呼び出されます(not inはinが完了した後に逆を取りますが、実際にはin操作です)
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