第一种:__iter__

实现__iter__的对象,是可迭代对象。__iter__方法可以直接封装一个迭代器,从而实现for循环

class A:
    def __init__(self):
        self.lis = [1,2,3,4]
    def __iter__(self):
        for i in self.lis:
            yield i


a = A()
for i in a:
    print(i)

 

第二种:__iter__ 和 __next__

利用__iter__返回自己,会进一步调用__next__方法,注意__next__方法要有raise StopIteration 的终止条件

class B:
    def __init__(self):
        self.lis = [1,2,3,4]
        self.c = -1
    def __iter__(self):
        return self
    def __next__(self):
        if self.c < self.lis.__len__()-1:
            self.c+=1
            return self.lis[self.c]
        else:
            raise StopIteration  # 一定有终止

 

第三种:__getitems__

for statement的另一个机制是角标索引,所以利用__getitems__方法同样可以实现

class C:
    def __init__(self):
        self.a = [1,2,3,4]
    def __getitem__(self, item):
        return self.a[item]


c = C()
for i in c:
    print(i)