patternpythonModeratepending
Python dataclasses vs Pydantic vs attrs Comparison
Viewed 0 times
dataclassespydanticattrsdata classesvalidationserialization
Problem
Python has multiple data class libraries (dataclasses, Pydantic, attrs) with overlapping functionality. Unclear which to choose for different use cases.
Solution
Quick comparison:
dataclasses (stdlib, Python 3.7+)
Best for: internal data structures, no validation needed, zero dependencies.
Pydantic (v2)
Best for: API input/output, config parsing, anything from external sources.
attrs
Best for: complex class hierarchies, maximum performance, fine-grained control.
Decision guide:
dataclasses (stdlib, Python 3.7+)
from dataclasses import dataclass, field
@dataclass
class User:
name: str
age: int
tags: list[str] = field(default_factory=list)Best for: internal data structures, no validation needed, zero dependencies.
Pydantic (v2)
from pydantic import BaseModel, field_validator
class User(BaseModel):
name: str
age: int
tags: list[str] = []
@field_validator('age')
@classmethod
def check_age(cls, v):
if v < 0: raise ValueError('Age must be positive')
return v
# Automatic validation on creation
user = User(name='Alice', age='30', tags=['admin'])
# age is coerced to int automatically
user.model_dump() # {'name': 'Alice', 'age': 30, 'tags': ['admin']}Best for: API input/output, config parsing, anything from external sources.
attrs
import attrs
@attrs.define
class User:
name: str
age: int = attrs.field(validator=attrs.validators.gt(0))
tags: list[str] = attrs.Factory(list)Best for: complex class hierarchies, maximum performance, fine-grained control.
Decision guide:
- Simple internal data? -> dataclasses
- External data (APIs, configs, user input)? -> Pydantic
- Performance-critical or complex inheritance? -> attrs
- Need JSON schema generation? -> Pydantic
Why
Each library has different strengths. Dataclasses are simple but don't validate. Pydantic validates and coerces. Attrs is the most flexible but adds a dependency.
Gotchas
- Pydantic v2 is significantly different from v1 - check migration guide
- dataclasses don't validate types at runtime - annotations are just hints
Context
Choosing a data class library in Python
Revisions (0)
No revisions yet.