| """Complex class example with properties, decorators, and advanced features.""" |
|
|
| from datetime import datetime |
| from typing import Optional, List |
|
|
|
|
| class Product: |
| """Product class with advanced Python features.""" |
| |
| |
| total_products = 0 |
| |
| def __init__(self, name: str, price: float, category: str): |
| self._name = name |
| self._price = price |
| self._category = category |
| self._created_at = datetime.now() |
| self._discount = 0.0 |
| Product.total_products += 1 |
| |
| @property |
| def name(self) -> str: |
| """Product name property.""" |
| return self._name |
| |
| @name.setter |
| def name(self, value: str): |
| if not value.strip(): |
| raise ValueError("Product name cannot be empty") |
| self._name = value |
| |
| @property |
| def price(self) -> float: |
| """Product price with discount applied.""" |
| return self._price * (1 - self._discount) |
| |
| @property |
| def original_price(self) -> float: |
| """Original price before discount.""" |
| return self._price |
| |
| @original_price.setter |
| def original_price(self, value: float): |
| if value < 0: |
| raise ValueError("Price cannot be negative") |
| self._price = value |
| |
| def apply_discount(self, percentage: float): |
| """Apply discount percentage.""" |
| if 0 <= percentage <= 100: |
| self._discount = percentage / 100 |
| |
| @staticmethod |
| def validate_category(category: str) -> bool: |
| """Validate if category is allowed.""" |
| allowed_categories = ["electronics", "clothing", "books", "food"] |
| return category.lower() in allowed_categories |
| |
| @classmethod |
| def create_book(cls, title: str, price: float): |
| """Factory method to create a book product.""" |
| return cls(title, price, "books") |
| |
| @classmethod |
| def get_total_products(cls) -> int: |
| """Get total number of products created.""" |
| return cls.total_products |
| |
| def __str__(self) -> str: |
| return f"{self._name} - ${self.price:.2f}" |
| |
| def __repr__(self) -> str: |
| return f"Product(name='{self._name}', price={self._price}, category='{self._category}')" |
|
|