Are writing classes in Python sometimes too much work? You have to usually define an _init_ method, or _repr_ or _eq_method, and suddenly your class is filled with code! Well, guess what? Python’s dataclass is here to save the day!
While using something called a decorator, you get automatic methods for initialization, representation, and comparison. This makes your code cleaner, faster, and easier to read.
dataclass
A dataclass is just a Python class with built-in automation. When the @dataclass decorator is used, Python automatically generates:
- An _init_ method to initialize attributes
- A _repr_ method for easy debugging
- An _eq_ method for object comparison
- Some optional features like ordering and immutability
The point is that instead of writing all this manually, Python does it for you!
In Python, __repr__and __eq__ are special methods (also called dunder methods) that help define how objects behave.
Here’s an easy to understand example:
Without dataclass =>
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})"
p = Person("Nilin", 23)
print(p) # person(name=Nilin, age=23)
With =>
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
p = Person("Nilin", 23)
print(p) # Person(name='Nilin', age=23)
As you can see the number of lines have reduced which makes the script way more readable.
Here are some more functions achieved:
Default Values
@dataclass
class Car:
brand: str
model: str
year: int = 2025 # Default value
c = Car("Toyota", "Corolla")
print(c) # Car(brand='Toyota', model='Corolla', year=2025)
If you don’t add a year it defaults to 2025.
Immutability
@dataclass(frozen=True)
class Point:
x: int
y: int
p = Point(2, 3)
p.x = 5 # Can't modify frozen it gives error
Immutable dataclasses are called frozen. It makes it read-only.
Auto Sorting
@dataclass(order=True)
class Student:
name: str
grade: int
s1 = Student("Nilin", 95)
s2 = Student("Rose", 80)
print(s1 > s2) # True (because 95 > 80)
students = [Student("A", 90), Student("B", 80), Student("C", 85)]
print(sorted(students))
# [Student(name='B', grade=80), Student(name='C', grade=85), Student(name='A', grade=90)]
Customisation
from dataclasses import dataclass, field
@dataclass
class Employee:
name: str
salary: int = field(default=5000, metadata={"description": "salary"})
USES
Benefits:

Dataclasses also may not be the best option sometimes. Here are a few cases:
- custom methods beyond storing data.
- complex inheritance (not handled it well).
- In some cases manually optimized classes can be faster.
For other cases , dataclass is usually a great choice!
Thus your code is cleaner, easier to read, and more efficient ;all while saving you from a lot of typing.
Less typing, more coding, and better performance!