dataclasses that adds automatic validation. Pydantic dataclasses combine the simplicity of dataclasses with Pydantic’s powerful validation features.
Overview
Pydantic dataclasses are similar to standard dataclasses but with key enhancements:- Automatic type validation on initialization
- Runtime type coercion
- Custom validators and serializers
- JSON schema generation
- Compatible with standard dataclass features
Basic Usage
Use the@dataclass decorator from Pydantic:
Differences from Standard Dataclasses
from pydantic.dataclasses import dataclass
from pydantic import ValidationError
@dataclass
class Product:
name: str
price: float
quantity: int
# Valid - types are coerced
product = Product(name='Widget', price='19.99', quantity='5')
print(product.price) # 19.99 (float)
# Invalid - raises ValidationError
try:
Product(name='Widget', price='invalid', quantity=5)
except ValidationError as e:
print(e)
from pydantic.dataclasses import dataclass
@dataclass(init=False) # Required for Pydantic
class Example:
value: int
from pydantic.dataclasses import dataclass
from pydantic import Field
@dataclass
class User:
name: str = Field(min_length=1, max_length=50)
age: int = Field(gt=0, lt=150)
email: str = Field(pattern=r'^[\w\.-]+@[\w\.-]+\.\w+$')
user = User(name='John', age=30, email='[email protected]')
print(user)
Configuration
Configure behavior usingConfigDict:
Common Configuration Options
Using with Pydantic Fields
Combine with Field for advanced validation:Nested Dataclasses
Dataclasses can be nested and validated:Frozen Dataclasses
Create immutable dataclasses:Validate Assignment
Enable validation when attributes are modified:Converting Stdlib Dataclasses
Wrap existing dataclasses to add validation:Default Values and Factories
Use default values and factory functions:Slots Support
Use slots for memory efficiency (Python 3.10+):Keyword-Only Fields
Require keyword arguments (Python 3.10+):JSON Schema Generation
Generate JSON schemas from dataclasses:Rebuilding Dataclasses
Rebuild schema when forward references are resolved:Checking if Pydantic Dataclass
Determine if a class is a Pydantic dataclass:Best Practices
When to Use Dataclasses vs Models
When to Use Dataclasses vs Models
Use Pydantic dataclasses when:
- You need compatibility with stdlib dataclasses
- You prefer a simpler syntax without inheritance
- You’re working with existing dataclass code
- You need ORM integration
- You want more advanced features like JSON parsing methods
- You need complex validation logic
Performance Considerations
Performance Considerations
Pydantic dataclasses have similar performance to BaseModel:
- Use
slots=Truefor memory efficiency (Python 3.10+) - Use
frozen=Truefor immutable data - Cache TypeAdapter instances for repeated validation
Validation Timing
Validation Timing
Remember that validation occurs:
- On initialization (always)
- On assignment (only if
validate_assignment=True) - Default values are validated only if
validate_default=True