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(如中所述for i in a)也将始终使用。__iter____contains__