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.