Какие магические методы необходимо реализовать, чтобы создать итератор в Python?

Магические методы итератора Итератор — это объект, поддерживающий протокол итерации Python Метод iter() — возвращает сам объект-итератор Метод next() — выдаёт следующий элемент либо вызывает StopIteration…

Короткий ответ

Что ответить на собеседовании

Магические методы итератора Итератор — это объект, поддерживающий протокол итерации Python Метод iter() — возвращает сам объект-итератор Метод next() — выдаёт следующий элемент либо вызывает StopIteration StopIteration сообщает, что последовательность закончилась Для совместимости с for и другими итерационными конструкциями необходимо реализовать оба метода Благодаря этому объект можно применять в циклах и передавать функциям, работающим с итерируемыми объектами Пример: класс с iter и next, который генерирует элементы по мере запроса

Подробный разбор

Ответ с пояснениями

Магические методы итератора

  • Итератор — это объект, поддерживающий протокол итерации 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 может правильно использовать класс в циклах и генераторах.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку