Магические методы итератора Итератор — это объект, поддерживающий протокол итерации Python Метод iter() — возвращает сам объект-итератор Метод next() — выдаёт следующий элемент либо вызывает StopIteration StopIteration сообщает, что последовательность закончилась Для совместимости с for и другими итерационными конструкциями необходимо реализовать оба метода Благодаря этому объект можно применять в циклах и передавать функциям, работающим с итерируемыми объектами Пример: класс с iter и next, который генерирует элементы по мере запроса
Какие магические методы необходимо реализовать, чтобы создать итератор в Python?
Магические методы итератора Итератор — это объект, поддерживающий протокол итерации Python Метод iter() — возвращает сам объект-итератор Метод next() — выдаёт следующий элемент либо вызывает StopIteration…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Магические методы итератора
- Итератор — это объект, поддерживающий протокол итерации Python
- Метод iter() — возвращает сам объект-итератор
- Метод next() — выдаёт следующий элемент либо вызывает StopIteration
- StopIteration сообщает, что последовательность закончилась
- Для совместимости с for и другими итерационными конструкциями необходимо реализовать оба метода
- Благодаря этому объект можно применять в циклах и передавать функциям, работающим с итерируемыми объектами
- Пример: класс с iter и next, который генерирует элементы по мере запроса
Подробный ответ
Основной ответ
Чтобы создать итератор в Python, требуется определить два ключевых магических метода: __iter__() и __next__(). Реализация __iter__() должна возвращать сам объект итератора — как правило, self. Метод __next__() поочерёдно выдаёт элементы последовательности. После исчерпания элементов __next__() обязан вызвать исключение StopIteration, которое обозначает завершение итерации.
Ключевые моменты
__iter__()— возвращает объект-итератор, обычноself. Поэтому объект можно использовать в циклеforи других конструкциях, выполняющих итерацию.__next__()— выдаёт очередное значение последовательности и хранит информацию о текущей позиции объекта. Когда последовательность заканчивается, метод выбрасываетStopIteration.- Такой контракт делает итератор совместимым с протоколами итерации Python. В результате объект можно применять с функциями
list(),sum(), конструкциямиforи генераторами.
Практический контекст
Распространённый вариант итератора — класс для последовательного обхода элементов списка или собственной структуры данных, например дерева либо графа. В актуальных версиях Python (3.x) поддержка этого интерфейса считается стандартным подходом, поскольку обеспечивает максимальную совместимость и удобство. При этом объект, который является только итерируемым, а не непосредственным итератором, реализует лишь __iter__(); этот метод возвращает итератор, поддерживающий __next__().
Итак, корректный итератор представляет собой класс с методами __iter__(self) и __next__(self). Метод __next__() последовательно выдаёт значения и отслеживает текущую позицию, а __iter__() возвращает объект-итератор. Благодаря этому Python может правильно использовать класс в циклах и генераторах.