/
Genius3193
/
Avito_python_adv
Обзор
Документация
Войти
/
Genius3193
/
Avito_python_adv
Код
Запросы
2
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Mixin_hw/Task#1.py
58 строк
2 KB
Iskandar
Decorators HW
23 дек 2024, 18:43
23 дек 2024, 18:43
b6673db
Код
Авторство
О чём код?
import json import keyword from typing import Any, Dict, Union class Mixinconvert: def read(self, file_path: str) -> Dict[str, Any]: with open(file_path, "r", encoding="utf-8") as file: return json.load(file) def convert_attr(self, data: Dict[str, Any]) -> None: for key, value in data.items(): if keyword.iskeyword(key): key += "_" if isinstance(value, dict): setattr(self, key, Mixinconvert()) getattr(self, key).convert_attr(value) else: setattr( self, key, ", ".join(value) if isinstance(value, list) else value ) class ColorizeMixin: REPR_COLOR_CODE = 33 def __repr__(self) -> str: if self.price: return ( f"\033[1;{self.REPR_COLOR_CODE};40m {self.title} | {self.price} \033[0m" ) return f"\033[1;{self.REPR_COLOR_CODE};40m {self.title} \033[0m" class Advert(ColorizeMixin, Mixinconvert): def __init__(self, file_path: str) -> None: super().__init__() data = self.read(file_path) self.convert_attr(data) if not hasattr(self, "title"): raise ValueError("The 'title' attribute is required.") self._price = self.__dict__.get("_price", None) if self._price is not None and self._price < 0: raise ValueError("Price must be >= 0") @property def price(self) -> Union[int, float]: return self._price if self._price is not None else 0 @price.setter def price(self, value: Union[int, float]) -> None: if value < 0: raise ValueError("Price must be >= 0") self._price = value