Храните три независимых списка ящиков и реализуйте iter как генератор, последовательно выдающий предметы из каждого. Каждый новый обход получит собственный итератор.
Реализовать класс ночная тумбочка
Храните три независимых списка ящиков и реализуйте __iter__ как генератор, последовательно выдающий предметы из каждого. Каждый новый обход получит собственный итератор.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте класс Nightstand, содержащий три ящика, каждый из которых способен хранить произвольные предметы. Добавьте возможность обхода экземпляра Nightstand с помощью итератора, чтобы можно было последовательно получать содержимое всех ящиков.
Ответ
Храните три независимых списка ящиков и реализуйте iter как генератор, последовательно выдающий предметы из каждого. Каждый новый обход получит собственный итератор.
Пример с нумерацией ящиков от 0 до 2:
class Nightstand:
def __init__(self):
self.drawers = [[], [], []]
def put(self, drawer, item):
if drawer not in (0, 1, 2):
raise IndexError('Unknown drawer')
self.drawers[drawer].append(item)
def __iter__(self):
for drawer in self.drawers:
yield from drawer
for item in nightstand обходит содержимое по порядку ящиков, пропуская пустые. Не используйте [[]] * 3: это три ссылки на один список. Изменение ящиков во время обхода отдельно не поддерживается данным контрактом.