python-best-practices▌
0xbigboss/claude-code · updated Apr 8, 2026
Type-first Python development using dataclasses, discriminated unions, NewType, and Protocol to make illegal states unrepresentable.
- ›Define data models and function signatures before implementation; use frozen dataclasses, Literal-based discriminated unions, and NewType for domain primitives to prevent invalid states at type-check time
- ›Leverage Protocol for structural typing, TypedDict for external data shapes, and exhaustive pattern matching with match statements to catch incomplete lo
Python Best Practices
Follows type-first, functional, and error handling patterns from CLAUDE.md. This skill covers language-specific idioms only.
Make Illegal States Unrepresentable
Use Python's type system to prevent invalid states at type-check time.
Frozen dataclasses for immutable domain models:
from dataclasses import dataclass
from datetime import datetime
@dataclass(frozen=True)
class User:
id: str
email: str
name: str
created_at: datetime
# Frozen dataclasses are immutable — no accidental mutation
Discriminated unions with Literal:
from dataclasses import dataclass
from typing import Literal
@dataclass
class Success:
status: Literal["success"] = "success"
data: str
@dataclass
class Failure:
status: Literal["error"] = "error"
error: Exception
RequestState = Success | Failure
def handle_state(state: RequestState) -> None:
match state:
case Success(data=data):
render(data)
case Failure(error=err):
show_error(err)
NewType for domain primitives:
from typing import NewType
UserId = NewType("UserId", str)
OrderId = NewType("OrderId", str)
def get_user(user_id: UserId) -> User:
# Type checker prevents passing OrderId here
...
Protocol for structural typing:
from typing import Protocol
class Readable(Protocol):
def read(self, n: int = -1) -> bytes: ...
def process_input(source: Readable) -> bytes:
# Accepts any object with a read() method — no inheritance required
return source.read()
Python-Specific Error Handling
Chain exceptions with from err to preserve the original traceback:
try:
data = json.loads(raw)
except json.JSONDecodeError as err:
raise ValueError(f"invalid JSON payload: {err}") from err
Structured Logging
Use a module-level logger with %s formatting (deferred string interpolation):
import logging
logger = logging.getLogger("myapp.widgets")
def create_widget(name: str) -> Widget:
logger.debug("creating widget: %s", name)
widget = Widget(name=name)
logger.debug("created widget id=%s", widget.id)
return widget
Optional: ty
For fast type checking, consider ty from Astral (creators of ruff and uv). Written in Rust, significantly faster than mypy or pyright.
uvx ty check # run directly, no install needed
uvx ty check src/ # check specific path
# pyproject.toml
[tool.ty]
python-version = "3.12"
When to choose:
ty— fastest, good for CI and large codebases (early stage, rapidly evolving)pyright— most complete type inference, VS Code integrationmypy— mature, extensive plugin ecosystem
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.6★★★★★44 reviews- ★★★★★Nia Okafor· Dec 28, 2024
We added python-best-practices from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
- ★★★★★Ama Chen· Dec 24, 2024
Keeps context tight: python-best-practices is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Luis Desai· Dec 16, 2024
python-best-practices fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
- ★★★★★Ava Ghosh· Nov 23, 2024
Registry listing for python-best-practices matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Arya Smith· Nov 19, 2024
Keeps context tight: python-best-practices is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Kwame Wang· Nov 15, 2024
We added python-best-practices from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
- ★★★★★Noor Bhatia· Oct 14, 2024
python-best-practices fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
- ★★★★★Ren Sharma· Oct 10, 2024
python-best-practices has been reliable in day-to-day use. Documentation quality is above average for community skills.
- ★★★★★Ama Tandon· Oct 6, 2024
Solid pick for teams standardizing on skills: python-best-practices is focused, and the summary matches what you get after install.
- ★★★★★Sakshi Patil· Sep 17, 2024
Keeps context tight: python-best-practices is the kind of skill you can hand to a new teammate without a long onboarding doc.
showing 1-10 of 44