Dataclasses (Python 3.7+) reduce boilerplate for classes that mainly hold data. The @dataclass decorator auto-generates __init__, __repr__, and more from typed fields. Use them instead of plain classes when you're mostly storing attributes with minimal logic. Add frozen=True for immutability.
What you'll learn:
- Using
@dataclassfor data containers - Typed fields and default values
- Less code, same behavior
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
p = Point(3.0, 4.0)
print(p)
print(p.x, p.y)
@dataclass
class Person:
name: str
age: int = 0 # default value
alice = Person("Alice", 30)
bob = Person("Bob") # age defaults to 0
print(alice)
print(bob)Without @dataclass, you'd write __init__, __repr__, and more by hand. The decorator generates them from the field declarations. Defaults go after required fields.
To run this program:
$ python source/dataclasses.py
Point(x=3.0, y=4.0)
3.0 4.0
Person(name='Alice', age=30)
Person(name='Bob', age=0)Tip: Use dataclasses for config objects, records, and DTOs. Use regular classes when you have complex behavior.
Try it: Add a @dataclass for a Rectangle with width and height, and a method that returns the area.
Source: dataclasses.py
Next: Enums