Перебор объекта-коллекции в ООП в Python
Цикл for по объекту сначала вызывает
метод __iter__. Он должен вернуть
итератор - объект, из которого
цикл берет элементы по одному.
Если внутри класса лежит список, часто
достаточно вернуть итератор от этого
списка через iter:
class Numbers:
def __init__(self):
self.__data = [1, 2, 3]
def __iter__(self):
return iter(self.__data)
Создадим объект и переберем числа в цикле:
nums = Numbers()
for num in nums:
print(num)
Тот же прием работает для объектов сотрудников. Обратите на него внимание - он пригодится вам в дальнейшем:
class Employee:
def __init__(self, name):
self.name = name
class Workers:
def __init__(self):
self.__data = [
Employee('john'),
Employee('smit'),
Employee('eric'),
]
def __iter__(self):
return iter(self.__data)
Переберем сотрудников и выведем имена:
workers = Workers()
for worker in workers:
print(worker.name)
Так объект объектов перебирают так же,
как список: цикл вызывает __iter__,
получает итератор и читает из него
элементы.
Добавьте __iter__ в класс
Numbers. Перебор должен идти
через iter от внутреннего списка.
Сделайте __iter__ в классе
Workers и выведите имена всех
сотрудников в цикле.