Python搜索自定义类:__包含__和__iter__
示例
为了允许使用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(如中所述foriina)也将始终使用。__iter____contains__