Обоснование довольно драматично, если вы привыкли к интерфейсу Iterator
в Java.
Примите во внимание следующее:
def my_generator():
yield "first"
yield "second"
yield from some_list()
Чтобы записать это как класс:
class MyIterator:
def __init__(self):
self.place = 0
def __next__(self):
if self.place == 0:
result = "first"
self.place += 1
elif self.place == 1:
result = "second"
self.place += 1
self.list_iter = iter(some_list())
else:
result = next(self.list_iter) # Throws implicitly
return result
Обновление вашего состояния - это просто шаблон, и если вы можете заставить компилятор / интерпретатор написать свой шаблон для вас, почему бы и нет?