Dataclasses Python

Dataclasses — это классы Python, но они подходят для хранения объектов данных. Этот модуль предоставляет декоратор и функции для автоматического добавления сгенерированных специальных методов, таких как __init__() и __repr__(), в пользовательские классы.

Особенности

  1. Они хранят данные и представляют определенный тип данных. Например, число. Для тех, кто знаком с ORM, экземпляр модели — это объект данных. Он представляет определенный вид сущности. Он содержит атрибуты, которые определяют или представляют эту сущность.

  2. Их можно сравнивать с другими объектами того же типа. Например, число может быть больше, меньше или равно другому числу.

Python 3.7 предоставляет декоратор dataclass, который используется для преобразования класса в dataclass.

class Number:
    def __init__(self, val):
        self.val = val

obj = Number(2)
obj.val
2

с dataclass

# Dataclass: автоматически генерирует методы __init__ и __repr__
from dataclasses import dataclass

@dataclass  # Декоратор преобразует класс в dataclass
class Number:
    val: int  # Обязательная аннотация типа

obj = Number(2)  # __init__ создается автоматически
obj.val
2

Значения по умолчанию

Легко добавить значения по умолчанию для полей вашего класса данных.

# Dataclass со значениями по умолчанию: поля со значениями по умолчанию должны следовать за обязательными полями
@dataclass
class Product:
    name: str        # Обязательное поле
    count: int = 0   # Необязательное поле со значением по умолчанию
    price: float = 0.0  # Необязательное поле со значением по умолчанию

obj = Product("Python")  # Требуется только name, остальные используют значения по умолчанию
obj.name
Python
obj.count
0
obj.price
0.0
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

В dataclass, где должны располагаться поля со значениями по умолчанию?
A. Перед полями без значений по умолчанию
B. После полей без значений по умолчанию
C. Это не имеет значения
D. В отдельном разделе

Подсказки типов (Type hints)

Обязательно указывать тип данных в dataclass. Однако, если вы предпочитаете не указывать тип данных, используйте typing.Any.

from dataclasses import dataclass
from typing import Any

@dataclass
class WithoutExplicitTypes:
   name: Any
   value: Any = 42

Связанные ссылки