PYTHON
Efficiently Define Data-Holding Classes with `dataclasses`
Learn how to use Python's `dataclasses` module to quickly create classes primarily used for storing data, reducing boilerplate code for `__init__`, `__repr__`, and `__eq__`.
from dataclasses import dataclass, field
@dataclass
class UserProfile:
user_id: int
username: str
email: str = field(default="[email protected]")
is_active: bool = True
roles: list[str] = field(default_factory=list)
# Creating instances
user1 = UserProfile(user_id=1, username="alice", email="[email protected]")
user2 = UserProfile(user_id=2, username="bob")
user3 = UserProfile(user_id=3, username="charlie", roles=["admin", "editor"])
print(user1)
print(user2)
print(user3)
# Dataclasses provide __eq__ automatically
user4 = UserProfile(user_id=1, username="alice", email="[email protected]")
print(f"User1 == User4: {user1 == user4}")
# Modifying a list field
user1.roles.append("viewer")
print(user1)
How it works: The `dataclasses` module provides a decorator to automatically generate common boilerplate methods (`__init__`, `__repr__`, `__eq__`, etc.) for classes primarily used to hold data. This significantly simplifies code, especially when defining data transfer objects (DTOs) or configuration structures. `field` allows custom default values and factory functions for mutable defaults, preventing unexpected shared state issues.