不理解__iter__和__next__的概念

不理解__iter__和__next__的概念

class MyList(object):
    def __init__(self, num):
        self.data = num
    def __iter__(self):
        return MyListIterator(self.data)

class MyListIterator(object):
    def __init__(self, data):
        self.data = data
        self.now = 0
    def __iter__(self):
        return self
    def __next__(self):
        while self.now < self.data:
            self.now += 1
            return self.now - 1
        raise StopIteration

my_list = MyList(5)
print(type(my_list))

my_list_iter = my_list.__iter__()
print(type(my_list_iter))

print(my_list_iter.__next__())
print(next(my_list_iter))
print(next(my_list_iter))
print(next(my_list_iter))
print(next(my_list_iter))

在其他答疑里看到的这个例子。

问题一、在class MyListIterator里已经用过__iter__了,还要返回到class MyList里的__iter__里,这样不会有问题或错误吗?这样意义何在?能看出什么东西吗?

问题二、视频里的示例连__init__都没有,为什么不会报错?

http://img1.sycdn.imooc.com//climg/5eb4fe0409d71efc00000000.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好:

  1. MyListIterator是一个迭代器对象,MyList是一个可迭代对象。可迭代对象的__iter__()方法会返回该可迭代对象的迭代器,即MyListIterator。是因为MyList是可迭代对象而不是迭代器因此才有这样的用法。

  2. 如果没有需要初始化的实例属性可以不写__init__(),这个并不会报错。

如果解决了你的疑惑,请采纳,祝学习愉快~


  • 江民川 提问者 #1
    我疑惑的就是,返回MyListIterator这个迭代器对象的迭代器,这不还是它本身吗? 或者换个说法,是不是MyList(5).__iter__()就是MyListIterator(5)?
    2020-05-08 16:06:37
  • 好帮手慕觉浅 回复 提问者 江民川 #2
    同学你好:你的理解是正确的。MyList(5).__iter__()返回的是MyListIterator(5)。返回MyListIterator这个迭代器对象的迭代器就是它本身。
    2020-05-08 17:21:10
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师