What are Dataclasses?
Dataclasses automatically generate common methods like __init__, __repr__, and __eq__, reducing boilerplate code.
Basic Dataclass
Compare traditional vs dataclass:
# Traditional class
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
def __eq__(self, other):
return self.name == other.name and self.age == other.age
# Dataclass (much simpler!)
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
Default Values
Add default values:
@dataclass
class Person:
name: str
age: int = 0
city: str = "Unknown"
Frozen Dataclasses
Make immutable:
@dataclass(frozen=True)
class Point:
x: int
y: int
point = Point(1, 2)
# point.x = 3 # Error! Frozen
Field Function
Use field() for advanced options:
from dataclasses import dataclass, field
@dataclass
class Inventory:
items: list = field(default_factory=list)
count: int = field(default=0, repr=False)
Benefits
- Less code: No need to write boilerplate
- Type hints: Built-in support
- Readable: Clear, concise definitions
- Automatic methods: __init__, __repr__, __eq__ generated
Best Practices
- Use for data containers: Classes that mainly hold data
- Add type hints: Required for dataclasses
- Use frozen for immutability: When data shouldn't change
- Consider alternatives: Named tuples for simple cases
Next Steps
Learn about type hints which work well with dataclasses.