Python Dataclasses — Modern Class Syntax

Python AdvancedDataclassesFree Lesson

Advertisement

Python Dataclasses — Modern Class Syntax

Dataclasses reduce boilerplate for classes that primarily store data. They auto-generate __init__, __repr__, __eq__, and more.

Learning Objectives

  • Create dataclasses with @dataclass decorator
  • Use field() for custom defaults and options
  • Create frozen (immutable) dataclasses
  • Use post_init for computed fields

Basic Dataclass

from dataclasses import dataclass

@dataclass
class Point:
    x: float
    y: float

p = Point(3.0, 4.0)
print(p)            # Point(x=3.0, y=4.0)
print(p.x, p.y)    # 3.0 4.0
print(p == Point(3.0, 4.0))  # True

field() Options

from dataclasses import dataclass, field
from typing import List

@dataclass
class Student:
    name: str
    age: int
    grades: List[float] = field(default_factory=list)
    gpa: float = field(init=False)

    def __post_init__(self):
        if self.grades:
            self.gpa = sum(self.grades) / len(self.grades)
        else:
            self.gpa = 0.0

s = Student("Alice", 20, [3.5, 4.0, 3.8])
print(s.gpa)  # 3.766...

Frozen Dataclass

@dataclass(frozen=True)
class Config:
    host: str = "localhost"
    port: int = 8080

config = Config()
# config.port = 9000  # AttributeError: frozen

# Hashable — can be dict key or set element
configs = {Config(): "default"}

Inheritance

@dataclass
class Animal:
    name: str
    species: str

@dataclass
class Pet(Animal):
    owner: str
    vaccinated: bool = True

pet = Pet("Rex", "Dog", "Alice")
print(pet)  # Pet(name='Rex', species='Dog', owner='Alice', vaccinated=True)

Key Takeaways

  1. @dataclass auto-generates __init__, __repr__, __eq__
  2. Use field() for mutable defaults and custom options
  3. frozen=True for immutable instances
  4. __post_init__ for computed fields
  5. Use default_factory for mutable default values

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement