为什么一个课程需要定义__iter__()
返回自我,以获得该类的迭代器?为什么一个类需要__iter __()来返回一个迭代器?
class MyClass:
def __init__(self):
self.state = 0
def __next__(self):
self.state += 1
if self.state > 4:
raise StopIteration
return self.state
myObj = MyClass()
for i in myObj:
print(i)
控制台日志:
Traceback (most recent call last):
for i in myObj:
TypeError: 'MyClass' object is not iterable
答案https://stackoverflow.com/a/9884259/4515198说
迭代器是与下一个(Python的2)或
__next__
(Python 3中)的方法的对象。
加入以下的任务:
def __iter__(self):
return self
是返回一个迭代,或者类,它定义了__next__()
方法的对象。
但是,当MyClass在myObj = MyClass()行中实例化时,不是返回已由__new__()
方法完成的MyClass对象的任务(它定义了__next__()
方法)?
不会定义__next__()
方法的类的对象是自己的迭代器吗?
我已经研究了问题What is the use of returning self in the __iter__ method?和Build a Basic Python Iterator,但我仍然无法理解让方法返回自我的原因。
我的意思是在“__new __()'方法中已经做过的事情”是,当已经创建了__new __() MyClass的一个对象,为什么我们需要通过'__iter __()'来再次返回MyClass对象? –
当我得到它时,像'for' ** _必须_ **这样的循环调用'__iter __()'方法来获取MyClass的实例或任何类的实例。这是它在python中的工作方式吗? –
如果存在,@ thebeliever3。您在问题主体中的链接中提供了回退选项(例如,如果没有找到__iter__,则尝试'__getitem__'。) –