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.

0 Likes
34 Views
0 Comments

Filters

No filters available for this view.

Reset All