# Python Decorators Advanced

> Use when implementing advanced Python decorators.

- Skill: `loopyluci/python-decorators-advanced` (Agent Skill)
- Install (CLI): `npx skillmds@latest add loopyluci/python-decorators-advanced`
- Raw SKILL.md: https://api.skillmd.com/api/skills/loopyluci/python-decorators-advanced/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: LoopyLuci (https://skillmd.com/u/loopyluci)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/loopyluci/python-decorators-advanced

---


# Advanced Python Decorators

Implementing advanced Python decorators — from parameterized decorators through class decorators, decorators with arguments, and stacked patterns.

## When to Use

- Building reusable cross-cutting concerns
- Implementing caching, retry, timing decorators
- Building DSL-like APIs with decorators

## Decorator Patterns

```python
from functools import wraps
import time

def retry(max_attempts=3, delay=1):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            for i in range(max_attempts):
                try: return func(*args, **kwargs)
                except Exception as e:
                    if i == max_attempts - 1: raise
                    time.sleep(delay)
            return None
        return wrapper
    return decorator

def timer(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__}: {time.time()-start:.3f}s")
        return result
    return wrapper
```

## Verification Checklist

- [ ] @wraps used to preserve metadata
- [ ] Decorator factory with arguments pattern
- [ ] Stacking decorators in correct order
- [ ] Class-based decorators with __call__
- [ ] Async decorator support

