class MySuperDataCollection:

Для обхода MySuperDataCollection нужен __iter__, возвращающий итератор по данным. В теле цикла также ошибка: печатать нужно item, а не неопределённый i.

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

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

Для обхода 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__; этот метод реализует возвращённый итератор.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее