Introduction to Dataclass in Python

Updated: March 1, 2023 By: Goodman Post a comment

This article is about the basics of dataclass in modern Python.

Overview

Dataclasses are a relatively new feature added to Python 3.7 that simplifies the process of creating classes to model and store data. They are essentially a shortcut to defining classes that have a specific set of attributes or properties. They automatically add the __init__(), __repr__(), and other common methods, therefore significantly reducing the amount of boilerplate code that is needed when defining classes.

This is a minimum example of defining a dataclass:

from dataclasses import dataclass

@dataclass
class Product:
    name: str
    price: float

When we decorate the class with @dataclass, Python automatically generates an __init__() method that takes 2 arguments: name and price. It also generates a __repr__() method that returns a string representation of the object:

from dataclasses import dataclass

@dataclass
class Product:
    name: str
    price: float

product = Product('Apple', 1.99)
print(product.__repr__())

Output:

Product(name='Apple', price=1.99)

More Examples

I believe that examples will help you learn and grasp the knowledge better than boring words. Below are some real-world examples of implementing dataclasses in Python.

A simple class to present a book

The code:

from dataclasses import dataclass

@dataclass
class Book:
    title: str
    author: str
    pages: int
    price: float


book = Book("Sling Academy Ruins", "Blazing Bull", 1208, 9.99)
print(book)

Output:

Book(title='Sling Academy Ruins', author='Blazing Bull', pages=1208, price=9.99)

A class to present a rectangle

The code:

from dataclasses import dataclass

@dataclass
class Rectangle:
    width: float
    height: float

    # this method calculates the area of the rectangle
    def area(self):
        return self.width * self.height

    # this method calculates the perimeter of the rectangle
    def perimeter(self):
        return 2 * (self.width + self.height)


# Try it
rectangle = Rectangle(3, 4) 
print(rectangle.area())
print(rectangle.perimeter())

Output:

12
14

The above is the first step to help you familiarize yourself with dataclasses. In the next articles, we will explore more advanced things.