Dataclasses Python

Dataclasses são classes python, mas são adequadas para armazenar objetos de dados. Este módulo fornece um decorador e funções para adicionar automaticamente métodos especiais gerados, como __init__() e __repr__(), a classes definidas pelo usuário.

Funcionalidades

  1. Elas armazenam dados e representam um certo tipo de dado. Ex: Um número. Para pessoas familiarizadas com ORMs, uma instância de modelo é um objeto de dados. Ele representa um tipo específico de entidade. Ele contém atributos que definem ou representam a entidade.

  2. Elas podem ser comparadas com outros objetos do mesmo tipo. Ex: Um número pode ser maior que, menor que ou igual a outro número.

Python 3.7 fornece um decorador dataclass que é usado para converter uma classe em uma dataclass.

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

obj = Number(2)
obj.val
2

com dataclass

# Dataclass: gera automaticamente os métodos __init__ e __repr__
from dataclasses import dataclass

@dataclass  # O decorador converte a classe em dataclass
class Number:
    val: int  # Anotação de tipo obrigatória

obj = Number(2)  # __init__ criado automaticamente
obj.val
2

Valores Padrão

É fácil adicionar valores padrão aos campos da sua data class.

# Dataclass com valores padrão: campos com padrões devem vir depois dos campos obrigatórios
@dataclass
class Product:
    name: str        # Campo obrigatório
    count: int = 0   # Campo opcional com valor padrão
    price: float = 0.0  # Campo opcional com valor padrão

obj = Product("Python")  # Apenas 'name' é obrigatório, os outros usam padrões
obj.name
Python
obj.count
0
obj.price
0.0
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

Em uma dataclass, onde os campos com valores padrão devem ser colocados?
A. Antes dos campos sem valores padrão
B. Depois dos campos sem valores padrão
C. Não importa
D. Em uma seção separada

Dicas de Tipo (Type hints)

É obrigatório definir o tipo de dado na dataclass. No entanto, se você preferir não especificar o tipo de dado, use typing.Any.

from dataclasses import dataclass
from typing import Any

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