| | """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}')" |
| |
|