все Python 3Итераторы и генераторыфункция
__iter__
протокол итератора
Метод, который вызывает iter(obj) и цикл for: возвращает итератор по объекту.
Синтаксис
def __iter__(self): ...
У итерируемого объекта __iter__ каждый раз возвращает новый итератор, поэтому список можно обходить много раз. У самого итератора __iter__ возвращает self — так итератор тоже годится для for, но проходится один раз. Удобный способ написать __iter__ — сделать его генератором через yield.
Примеры
class Countdown:
def __init__(self, n):
self.n = n
def __iter__(self):
for i in range(self.n, 0, -1):
yield i
c = Countdown(3)
print(list(c)) # → [3, 2, 1]
print(list(c)) # → [3, 2, 1] — новый итератор при каждом обходе
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности