/
LKastornova
/
Python_lesson
Обзор
Документация
Войти
/
LKastornova
/
Python_lesson
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
models.py
143 строки
6 KB
@lvkastor
Initial commit: Finance Manager 2026 application
11 янв 2026, 19:15
11 янв 2026, 19:15
209a1c3
Код
Авторство
О чём код?
""" Модуль данных для приложения управления финансами. Содержит классы, описывающие основные сущности приложения: - FinancialOperation - финансовая операция (доход/расход) - Category - категория расходов с подкатегориями Классы реализуют принципы ООП и обеспечивают структурированное хранение финансовых данных. """ from datetime import datetime class FinancialOperation: """ Класс, представляющий финансовую операцию. Атрибуты: operation_type (str): Тип операции ('income' - доход, 'expense' - расход) amount (float): Сумма операции category (str): Категория операции subcategory (str, optional): Подкатегория операции date (datetime): Дата и время операции comment (str, optional): Комментарий к операции Методы: __init__: Инициализация финансовой операции __repr__: Строковое представление операции date_only: Свойство, возвращающее только дату (без времени) Пример: >>> operation = FinancialOperation('income', 1000, 'работа', 'зарплата') >>> print(operation) 2024-01-10 12:00:00 - income: 1000 (работа, зарплата) """ def __init__(self, operation_type, amount, category, subcategory=None, date=None, comment=None): """ Инициализирует финансовую операцию. Args: operation_type: Тип операции ('income' или 'expense') amount: Сумма операции (должна быть положительной) category: Категория операции subcategory: Подкатегория операции (опционально) date: Дата операции (если None, используется текущая дата) comment: Комментарий к операции (опционально) Raises: ValueError: Если сумма не положительная или тип операции неверный """ self.operation_type = operation_type self.amount = amount self.category = category self.subcategory = subcategory # Конвертируем date в datetime, если это не datetime if date is None: self.date = datetime.now() elif isinstance(date, datetime): self.date = date elif hasattr(date, 'year'): # Это date объект self.date = datetime.combine(date, datetime.min.time()) else: # Пробуем преобразовать строку try: self.date = datetime.strptime(str(date), '%Y-%m-%d') except (ValueError, TypeError): self.date = datetime.now() self.comment = comment def __repr__(self): """ Возвращает строковое представление операции. Returns: str: Описание операции в формате "дата - тип: сумма (категория, подкатегория)" """ return f"{self.date} - {self.operation_type}: {self.amount} ({self.category}, {self.subcategory})" @property def date_only(self): """ Возвращает только дату операции (без времени). Returns: datetime.date: Дата операции """ return self.date.date() class Category: """ Класс, представляющий категорию расходов. Атрибуты: name (str): Название категории subcategories (list): Список подкатегорий Методы: __init__: Инициализация категории add_subcategory: Добавление подкатегории __repr__: Строковое представление категории Пример: >>> category = Category('еда', ['продукты', 'кафе']) >>> category.add_subcategory('доставка') >>> print(category) еда: продукты, кафе, доставка """ def __init__(self, name, subcategories=None): """ Инициализирует категорию расходов. Args: name: Название категории subcategories: Список подкатегорий (по умолчанию пустой список) """ self.name = name self.subcategories = subcategories if subcategories else [] def add_subcategory(self, subcategory): """ Добавляет подкатегорию в категорию. Args: subcategory: Название подкатегории Пример: >>> category = Category('транспорт') >>> category.add_subcategory('такси') """ self.subcategories.append(subcategory) def __repr__(self): """ Возвращает строковое представление категории. Returns: str: Категория и список подкатегорий """ return f"{self.name}: {', '.join(self.subcategories)}"