Sobes.tech
Junior — Middle

What is the difference between using and not using the @dataclass decorator in Python?

sobes.tech AI

Answer from AI

The @dataclass decorator in Python automatically generates special methods for a class, such as __init__, __repr__, __eq__, and others, based on the declared attributes of the class. This significantly simplifies the creation of classes intended for storing data, eliminating the need to write a lot of boilerplate code.

Without using @dataclass, you need to manually implement these methods, which increases the amount of code and the likelihood of errors.

Example using @dataclass:

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p1 = Point(1, 2)
p2 = Point(1, 2)
print(p1)        # Point(x=1, y=2)
print(p1 == p2)  # True

Without @dataclass, you need to write something like:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f'Point(x={self.x}, y={self.y})'

    def __eq__(self, other):
        if not isinstance(other, Point):
            return False
        return self.x == other.x and self.y == other.y

p1 = Point(1, 2)
p2 = Point(1, 2)
print(p1)        # Point(x=1, y=2)
print(p1 == p2)  # True

Thus, @dataclass improves readability and reduces code when working with classes that serve as data containers.

What is the difference between using and not using… - sobes.tech