Python: Каталог товаров: dataclass, NamedTuple и field(defaultfactory=...)
Каталог товаров: dataclass, NamedTuple и field(default_factory=...)
Что уже дано
В редакторе импортированы dataclass, field и NamedTuple и оставлены места для двух типов и одной функции. Проверяющая система не передаёт готовый каталог: после кода ученика она сама создаёт категории и товары и вызывает вашу функцию.
Что нужно сделать
Объявите на верхнем уровне:
CategoryкакNamedTupleс полямиname: strиcode: str.- Изменяемый
Productкак@dataclassс полямиtitle: str,price: float,category: Categoryиtags: list[str]. Дляtagsнужен отдельный пустой список у каждого экземпляра черезfield(default_factory=list). - Функцию
make_catalog(products: list[Product]) -> dict[Category, list[Product]], которая группирует товары по категориям и сохраняет исходный порядок товаров внутри каждой группы.
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно. Скрытые тесты создают объекты через ваши классы и передают список Product в make_catalog. Функция возвращает словарь, где ключи — объекты Category, а значения — списки Product.
Пример использования
paper = Category("Бумага", "paper")
book = Product("Книга", 500.0, paper)
album = Product("Альбом", 300.0, paper)
catalog = make_catalog([book, album])
print([product.title for product in catalog[paper]])
print(book.tags is album.tags)
Результат:
['Книга', 'Альбом']
False
РешениеPython
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Класс, init, атрибуты экземпляра и методы — задача по Python
- Инкапсуляция и property в Python: исправьте класс температуры
- Специальные методы: repr, str, eq, len — задача по Python
- Наследование, super() и переопределение методов — задача по Python
- Python: Класс Event с альтернативным конструктором и валидацией
- Python: Иерархия исключений для банковского счёта
