为了允许使用infor自定义类,该类必须提供magic方法__contains__或失败的__iter__-method方法。
假设您有一个包含的list的类list:
class ListList:
def __init__(self, value):
self.value= value
# 创建一组所有值以进行快速访问
self.setofvalues= set(item for sublist inself.valuefor item in sublist)
def __iter__(self):
print('Using __iter__.')
# 所有子列表元素的生成器
return (item for sublist inself.valuefor item in sublist)
def __contains__(self, value):
print('Using __contains__.')
# 只需查找值是否在集合中
return value in self.setofvalues
# 即使没有设置,您也可以对包含检查使用iter方法:
# 返回any(item == iter(self)中项目的值)可以使用以下方式进行成员资格测试in:
a = ListList([[1,1,1],[0,1,1],[1,5,1]]) 10 in a # 假 # 印刷品:使用__contains__。 5 in a # 真正 # 印刷品:使用__contains__。
即使删除__contains__方法后:
del ListList.__contains__ 5 in a # 真正 # 打印:使用__iter__。
注意:即使该类实现了方法,循环in(如中所述for i in a)也将始终使用。__iter____contains__