__iter__方法,__next__方法

1.代码实现
# 定义一个类
# 怎么样才能成为可迭代对象?

# __iter__方法需要返回什么东西?

class MyList:
    def __init__(self):
        self.items = list()

    def add(self, item):
        self.items.append(item)

    # 要想成为可迭代对象类,必须具备__iter__方法
    def __iter__(self):
        # 省略
        # 需要在iter方法内返回个什么东西
        # iter方法到底需要返回一个什么东西
        # 这个对象是个什么 --> 迭代器
        return MyIterator(self.items)


class MyIterator:

    def __init__(self, obj):
        self.mes = obj
        self.current_num = 0

    def __iter__(self):
        pass

    def __next__(self):
        # 索引越界
        if self.current_num < len(self.mes):
            result = self.mes[self.current_num]
            self.current_num += 1
            return result
        else:
            raise StopIteration

# a = MyIterator()
# 通过类生成实例对象
m = MyList()
m.add(1)
m.add(2)
m.add(3)
m.add(4)

# m对象具备使用for循环的方法吗?
# iter  next
for i in m:
    print(i)
2.迭代协议

迭代协议 1.在任何可迭代对象传入到for循环或者其他循环工具中进行遍历时,迭代工具都是先通过iter()函数获得与可迭代对象对应的迭代器。 2.然后在对迭代器调用next函数,不断的依次获取元素 3.并在捕获到StopIteration异常时确定完成迭代,这就是完整的迭代过程,称之为"迭代协议"

posted @ 2020-12-25 11:52  DoomLs  阅读(189)  评论(0)    收藏  举报