📊 Capítulo 08: Dataclasses & Modelagem de Domínio
Especialização em Sistemas com Python
🗺️ Classes Tradicionais vs @dataclass do Python Moderno
flowchart TD
subgraph TRAD ["Classe Manual (Boilerplate Infinito)"]
T1["class Produto:\n def __init__(self, id, nome, preco):\n self.id = id; self.nome = nome; self.preco = preco\n def __repr__(self): ...\n def __eq__(self, other): ...\n def __hash__(self): ...\n(Mais de 30 linhas de código repetitivo e sujeito a erros!) 🚨"]
end
subgraph DC ["@dataclass (Conciso e Tipado)"]
D1["@dataclass(frozen=True, slots=True)\nclass Produto:\n id: int\n nome: str\n preco: float\n(3 linhas: gera __init__, __repr__, __eq__, imutabilidade e economia de RAM!) ⚡"]
end
TRAD -.-> |"Substituir por"| DC
style TRAD fill:#ffebee,stroke:#d32f2f,stroke-width:2px
style DC fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: Imutabilidade com frozen=True
from dataclasses import dataclass
@dataclass(frozen=True)
class Coordenada:
x: float
y: float
- Qualquer tentativa de alterar
coord.x = 10disparaFrozenInstanceErrorimediatamente! - Objetos imutáveis podem ser usados como chaves em dicionários e elementos de conjuntos
set!
🎯 Slide 2: Pós-Inicialização com __post_init__
@dataclass
class Pedido:
cliente_id: int
itens: list[str]
total: float = 0.0
def __post_init__(self) -> None:
if self.total < 0:
raise ValueError("Total não pode ser negativo")
🎯 Slide 3: Enum e StrEnum (Python 3.11+)
from enum import StrEnumpermite comparar diretamente com strings sem precisar de.value(if status == StatusPedido.ENVIADO:).
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim