Реализовать класс ночная тумбочка

Храните три независимых списка ящиков и реализуйте __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: это три ссылки на один список. Изменение ящиков во время обхода отдельно не поддерживается данным контрактом.

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

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

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

Подробнее