Dataclasses in Python (@dataclass)
@amitmund
June 17, 2026
Dataclasses in Python (@dataclass)
Dataclasses are used to create classes mainly for storing data with minimal boilerplate.
They automatically generate: - __init__ - __repr__ - __eq__
Why Dataclass?
Without dataclass:
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
With dataclass:
from dataclasses import dataclass
@dataclass
class Student:
name: str
age: int
1. Basic Example
from dataclasses import dataclass
@dataclass
class Student:
name: str
age: int
s = Student("Aman", 20)
print(s)
Output:
Student(name='Aman', age=20)
Real World Example
from dataclasses import dataclass
@dataclass
class Student:
name: str
marks: int
s1 = Student("Ravi", 85)
s2 = Student("Aman", 90)
print(s1)
print(s2)
2. Benefits of Dataclass
Benefit 1: Less Boilerplate
class A:
def __init__(self, x):
self.x = x
vs
from dataclasses import dataclass
@dataclass
class A:
x: int
Benefit 2: Auto Representation
from dataclasses import dataclass
@dataclass
class Product:
name: str
price: int
p = Product("Phone", 20000)
print(p)
Output:
Product(name='Phone', price=20000)
Benefit 3: Auto Comparison
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p1 = Point(1, 2)
p2 = Point(1, 2)
print(p1 == p2)
Output:
True
Graph: Dataclass Flow
Dataclass decorator ↓ Auto generates __init__, __repr__, __eq__ ↓ Cleaner object usage
3. Default Values
from dataclasses import dataclass
@dataclass
class Student:
name: str
age: int = 18
s = Student("Aman")
print(s)
Output:
Student(name='Aman', age=18)
4. Mutable Default Problem
❌ WRONG
from dataclasses import dataclass
@dataclass
class Student:
marks: list = []
Problem: Shared list across objects
✔ CORRECT
from dataclasses import dataclass, field
@dataclass
class Student:
marks: list = field(default_factory=list)
Real World Example
from dataclasses import dataclass, field
@dataclass
class Cart:
items: list = field(default_factory=list)
def add(self, item):
self.items.append(item)
5. Dataclass with Methods
from dataclasses import dataclass
@dataclass
class Calculator:
a: int
b: int
def add(self):
return self.a + self.b
c = Calculator(10, 20)
print(c.add())
Output:
30
6. Real World Mapping
| Use Case | Example |
|---|---|
| API Response | JSON data |
| DB Models | Django models |
| Config | settings objects |
| Game objects | player stats |
7. Common Mistakes
Mistake 1
@dataclass
class A:
x
Fix:
x: int
Mistake 2
marks: list = []
Fix:
marks: list = field(default_factory=list)
Homework 1
from dataclasses import dataclass
@dataclass
class Employee:
name: str
salary: int
department: str = "IT"
e = Employee("Aman", 50000)
print(e)
Homework 2
from dataclasses import dataclass
@dataclass
class Book:
name: str
author: str
price: int
b1 = Book("Python", "Guido", 500)
b2 = Book("Python", "Guido", 500)
print(b1 == b2)
Homework 3
from dataclasses import dataclass, field
@dataclass
class Student:
name: str
marks: list = field(default_factory=list)
def average(self):
return sum(self.marks) / len(self.marks)
s = Student("Aman", [80, 90, 100])
print(s.average())
Summary
| Feature | Benefit |
|---|---|
| __init__ | auto generated |
| __repr__ | auto generated |
| __eq__ | auto comparison |
| code length | reduced |
| readability | improved |
Visual Flow
Class Definition ↓ @dataclass ↓ Auto method generation ↓ Simple object usage
Next Topics
- Pydantic (validation)
- Django Models
- SOLID Principles
- OOP Design Patterns
- Serialization (JSON)
- NamedTuple vs Dataclass ```
If this still “breaks” in your editor, tell me which one you’re using (VS Code / Obsidian / Notion), and I’ll adapt it perfectly for that system.