视频中的company不是可迭代对象

来源:9-2 什么是迭代器和可迭代对象

weixin_慕九州8177213

2020-05-26

from collections.abc import Iterable, Iterator


class Company(object):
    def __init__(self, employee_list):
        self.employee = employee_list

    def __iter__(self):
        return MyIterator(self.employee)


class MyIterator(Iterator):
    def __init__(self, employee_list):
        self.iter_list = employee_list
        self.index = 0

    def __next__(self):
        # 真正返回迭代值的逻辑
        try:
            word = self.iter_list[self.index]
        except IndexError:
            raise StopIteration
        self.index += 1
        return word


if __name__ == '__main__':
    company = Company(["job", "jane", "steve"])
    # my_iter = iter(company)
    while True:
        try:
            print(next(company))
        except StopIteration:
            break

视频中最后证实实现可迭代对象company时,实际遍历的是通过iter函数转换之后的my_iter;我试着使用next(company)来获取employee的值,但是报了company不是可迭代对象的错误;我觉得既然company实现了迭代器协议,那么应该使用next(company)而不是next(my_iter),因为my_iter是经过iter函数转换之后的,如果使用my_iter进行遍历的话,那么只需要实现__getitem__;以上是我的代码,我不知道哪里错了,希望老师看到能回复一下

写回答

1回答

慕无忌5445318

2020-06-30

身身身身身身身

0
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程