Для обхода MySuperDataCollection нужен iter, возвращающий итератор по данным. В теле цикла также ошибка: печатать нужно item, а не неопределённый i.
class MySuperDataCollection:
Для обхода MySuperDataCollection нужен __iter__, возвращающий итератор по данным. В теле цикла также ошибка: печатать нужно item, а не неопределённый i.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
class MySuperDataCollection: def init(self, *args, **kwargs): pass
msc = MySuperDataCollection() for item in msc: print(i)
Ответ
Для обхода MySuperDataCollection нужен iter, возвращающий итератор по данным. В теле цикла также ошибка: печатать нужно item, а не неопределённый i.
Один возможный контракт — хранить переданные элементы:
class MySuperDataCollection:
def __init__(self, *items):
self._items = list(items)
def __iter__(self):
return iter(self._items)
msc = MySuperDataCollection(1, 2, 3)
for item in msc:
print(item)
В исходнике объект не реализует протокол итерации, поэтому цикл не начнётся. Возвращение нового итератора при каждом iter(msc) позволяет независимые повторные обходы. Самой коллекции необязательно иметь __next__; этот метод реализует возвращённый итератор.