home / skills / eyadsibai / ltk / python-patterns
This skill helps you write idiomatic modern Python by applying type hints, dataclasses, context managers, decorators, and async patterns.
npx playbooks add skill eyadsibai/ltk --skill python-patternsReview the files below or copy the command above to add this skill to your agents.
---
name: Python Patterns
description: This skill should be used when the user asks about "Python best practices", "Pythonic code", "Python patterns", "Python idioms", "type hints", "dataclasses", "async Python", "Python decorators", "context managers"
version: 1.0.0
---
# Python Patterns
Guidance for writing idiomatic, modern Python code.
## Modern Python Features (3.9+)
| Feature | Purpose | Key Concept |
|---------|---------|-------------|
| **Type hints** | Static analysis | `def func(x: str) -> int:` |
| **Dataclasses** | Structured data | Auto `__init__`, `__repr__`, etc. |
| **Context managers** | Resource cleanup | `with` statement guarantees cleanup |
| **Decorators** | Cross-cutting concerns | Wrap functions to add behavior |
| **Async/await** | Concurrent I/O | Non-blocking operations |
---
## Type Hints
**Modern syntax (3.10+)**: Use `|` for unions, built-in types for generics.
| Old | Modern |
|-----|--------|
| `Optional[str]` | `str \| None` |
| `Union[str, int]` | `str \| int` |
| `List[str]` | `list[str]` |
| `Dict[str, int]` | `dict[str, int]` |
**Key concept**: Type hints are for tooling (mypy, IDEs) - no runtime enforcement.
---
## Dataclasses vs Alternatives
| Use | For |
|-----|-----|
| `@dataclass` | Mutable data with methods |
| `@dataclass(frozen=True)` | Immutable, hashable |
| `NamedTuple` | Lightweight, tuple semantics |
| `TypedDict` | Dict with known keys |
| `Pydantic` | Validation, serialization |
---
## Context Managers
Use for any resource that needs cleanup: files, connections, locks, transactions.
**Pattern**: Acquire in `__enter__`, release in `__exit__` (or use `@contextmanager` with `yield`)
---
## Decorators
| Pattern | Use Case |
|---------|----------|
| Simple decorator | Logging, timing |
| Decorator with args | Configurable behavior |
| Class decorator | Modify class definition |
| `@functools.wraps` | Preserve function metadata |
---
## Async Python
**When to use**: I/O-bound operations (HTTP requests, DB queries, file I/O)
**When NOT to use**: CPU-bound operations (use `multiprocessing` instead)
| Concept | Purpose |
|---------|---------|
| `async def` | Define coroutine |
| `await` | Suspend until complete |
| `asyncio.gather()` | Run multiple concurrently |
| `async with` | Async context manager |
| `async for` | Async iteration |
---
## Pythonic Idioms
| Instead of | Use |
|------------|-----|
| `if len(x) > 0:` | `if x:` |
| `for i in range(len(x)):` | `for item in x:` or `enumerate()` |
| `d.has_key(k)` | `k in d` |
| `try/if exists` (LBYL) | `try/except` (EAFP) |
| Manual swap | `a, b = b, a` |
---
## Project Structure
```
my_project/
├── src/my_package/ # Source code
├── tests/ # Test files
├── pyproject.toml # Project config
└── README.md
```
**Key concept**: Use `src/` layout to prevent import confusion.
---
## Tooling
| Tool | Purpose |
|------|---------|
| **ruff** | Fast linter + formatter |
| **mypy** | Type checking |
| **pytest** | Testing |
| **uv/pip** | Dependencies |
## Resources
- Python docs: <https://docs.python.org/3/>
- Real Python: <https://realpython.com/>
This skill provides concise guidance for writing idiomatic, modern Python code focused on patterns, best practices, and practical features (3.9+). It covers type hints, dataclasses, context managers, decorators, async/await, Pythonic idioms, project layout, and recommended tooling. The goal is to help you write clearer, safer, and more maintainable Python.
The skill inspects common Python concerns and recommends modern constructs and patterns to solve them. It explains when to use type hints and dataclasses, how to implement context managers and decorators correctly, and when to prefer async code versus multiprocessing. It also highlights small idioms and project layout choices that reduce bugs and improve readability.
Are type hints enforced at runtime?
No. Type hints are for tooling and documentation; use runtime checks or libraries like pydantic if you need validation.
When should I choose dataclasses over NamedTuple or TypedDict?
Use dataclasses for mutable records with methods, frozen dataclasses for immutability, NamedTuple for lightweight tuple semantics, and TypedDict for dict-like shapes.