← Назад к вопросам
Какие методы нужно переопределить для реализации итератора?
2.2 Middle🔥 171 комментариев
#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Методы для реализации итератора
Для создания итератора в Python нужно реализовать два магических метода: __iter__() и __next__().
Основные методы
1. __iter__() — инициализация итератора
Овозвращает сам итератор или новый объект итератора.
2. __next__() — получение следующего элемента
Возвращает следующий элемент, или выбрасывает StopIteration когда элементы закончились.
Полный пример итератора
class CountUp:
def __init__(self, max):
self.max = max
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current < self.max:
self.current += 1
return self.current
else:
raise StopIteration
for num in CountUp(3):
print(num) # 1, 2, 3
Разница между итератором и итерируемым
- Итерируемый: объект с методом
__iter__()(список, строка, словарь) - Итератор: объект с методами
__iter__()и__next__()
class CustomRange:
def __init__(self, max):
self.max = max
def __iter__(self):
return RangeIterator(self.max)
class RangeIterator:
def __init__(self, max):
self.max = max
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < self.max:
self.index += 1
return self.index
raise StopIteration
for num in CustomRange(3):
print(num)
Генератор - простой способ
Генератор использует yield и автоматически реализует интерфейс итератора:
def count_up(max):
current = 0
while current < max:
current += 1
yield current
for num in count_up(3):
print(num)
Практический пример: итератор по файлу
class FileIterator:
def __init__(self, filename):
self.file = open(filename, "r")
def __iter__(self):
return self
def __next__(self):
line = self.file.readline()
if not line:
self.file.close()
raise StopIteration
return line.strip()
for line in FileIterator("data.txt"):
print(line)
Важные моменты
__iter__()должен возвращать объект с методом__next__()__next__()должен выбросить StopIteration когда элементы закончились- Генератор с yield - это удобный способ создания итераторов
- Итератор может быть использован только один раз (статефул)
- Каждый вызов for использует итератор полностью
Проверка итератора
from collections.abc import Iterator, Iterable
my_iter = CountUp(3)
print(isinstance(my_iter, Iterator))
print(isinstance(my_iter, Iterable))
Итератор - это фундаментальная концепция Python, которая используется везде: в цикле for, при работе с файлами, в функциях map/filter, в понимании списков (list comprehension).