爲什麼一個課程需要定義__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__'。) –