Данный проект представляет собой консольное приложение, реализующее базовую логику учета товаров и категорий в магазине электроники. Проект создан с применением принципов объектно-ориентированного программирования (ООП) для демонстрации построения гибкой и расширяемой архитектуры.
- Язык: Python
- Концепции: Объектно-ориентированное программирование (ООП), абстрактные классы, наследование, миксины, магические методы.
- Тестирование: Pytest, pytest-cov (для отчета о покрытии кода).
- Учет товаров:
- Создание карточек товаров с названием, описанием, ценой и количеством.
- Автоматический подсчет общей стоимости товаров в категории (
Category.product_count).
- Категории товаров:
- Группировка товаров по категориям (например, "Смартфоны" или "Телевизоры").
- Автоматический подсчет общего количества категорий (
Category.category_count) и товаров.
- Логирование: Миксин
CreateLogMixinдля логирования создания объектов (выводит имя класса и переданные аргументы). - Валидация:
- Возможность сложения только товаров одинаковых классов (при попытке сложения разных типов товаров выбрасывается
TypeError). - Проверка типа добавляемого в категорию объекта (должен быть экземпляром
Productили его наследником).
- Возможность сложения только товаров одинаковых классов (при попытке сложения разных типов товаров выбрасывается
- Строковое представление: Реализация метода
__str__для удобного строкового представления продукта.
- Абстрактный класс
BaseProduct:- Базовый абстрактный класс для всех продуктов.
- Определяет основные атрибуты продукта и содержит абстрактный метод
calculate_total_value.
- Миксин
CreateLogMixin:- Добавляет функциональность логирования при создании объектов.
- Используется в классе
Productдля вывода информации о создании.
- Класс
Product:- Наследуется от
BaseProductи используетCreateLogMixin. - Хранит данные о товаре, реализует валидацию входных данных.
- Переопределяет магические методы
__str__и__add__.
- Наследуется от
- Класс
Category:- Управление коллекцией товаров и их группировка.
- Автоматический подсчет статистики по категориям и товарам.
- Наследники класса
Product:Smartphone: с дополнительными атрибутами: производительность, модель, объем памяти, цвет.LawnGrass: с дополнительными атрибутами: страна-производитель, срок прорастания, цвет.
# Создание товара
phone = Product("iPhone 15", "512GB, Space Gray", 100000.0, 5)
# Создание категории и добавление товара
smartphones = Category("Смартфоны", "Мобильные устройства", [])
smartphones.append_product(phone)
# Создание наследника продукта
iphone_15_pro = Smartphone("iPhone 15 Pro", "512GB, Titanium", 120000.0, 3, "Высокая", "Pro Max", "512GB", "Черный")
smartphones.append_product(iphone_15_pro)
# Примеры работы с магическими методами (раскомментируйте для использования)
# print(phone) # Выведет строковое представление продукта
# total_value = phone + iphone_15_pro # Суммирование цен