"""Скидки демо-проекта ci-demo (СТРПО, неделя 9, Gitea edition).""" from abc import ABC, abstractmethod class Discount(ABC): @abstractmethod def apply(self, total: float) -> float: """Вернуть сумму с учётом скидки.""" class NoDiscount(Discount): def apply(self, total: float) -> float: return total class VIPDiscount(Discount): def apply(self, total: float) -> float: return total * 0.9 class EmployeeDiscount(Discount): def apply(self, total: float) -> float: return total * 0.7 DISCOUNTS: dict[str, type[Discount]] = { "regular": NoDiscount, "vip": VIPDiscount, "employee": EmployeeDiscount, } def discount_for(customer_type: str) -> Discount: """Выбрать стратегию скидки по типу клиента.""" return DISCOUNTS.get(customer_type, NoDiscount)()