Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpClNx 104 of 174 menu
◀ ▶

Следующий элемент итератора в ООП в Python

Итератор выдает элементы через метод __next__. Когда элементы закончились, метод должен выбросить исключение StopIteration.

Давайте сделаем отдельный класс- итератор для чисел:

class NumbersIter: def __init__(self, data): self.__data = data self.__index = 0 def __iter__(self): return self def __next__(self): if self.__index >= len(self.__data): raise StopIteration elem = self.__data[self.__index] self.__index += 1 return elem

Метод __iter__ коллекции вернет объект этого класса:

class Numbers: def __init__(self): self.__data = [1, 2, 3] def __iter__(self): return NumbersIter(self.__data)

Создадим коллекцию и переберем ее в цикле:

nums = Numbers() for num in nums: print(num)

Цикл сам вызовет __iter__, затем многократно __next__, пока не придет StopIteration.

Сделаем итератор для списка сотрудников:

class WorkersIter: def __init__(self, data): self.__data = data self.__index = 0 def __iter__(self): return self def __next__(self): if self.__index >= len(self.__data): raise StopIteration elem = self.__data[self.__index] self.__index += 1 return elem class Employee: def __init__(self, name): self.name = name class Workers: def __init__(self): self.__data = [ Employee('john'), Employee('smit'), ] def __iter__(self): return WorkersIter(self.__data)

Переберем сотрудников:

workers = Workers() for worker in workers: print(worker.name)

Сделайте класс NumbersIter с методом __next__. Подключите его в __iter__ класса Numbers.

Сделайте класс WorkersIter и верните его из __iter__ класса Workers.

В __next__ при окончании данных выбрасывайте StopIteration.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить