Definindo uma classe de dados
Use @dataclass para remover código repetitivo.
Definindo uma classe de dados é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
Por que usar classes de dados?
Quando escreve uma classe que armazena principalmente dados, acaba repetindo o mesmo código padrão: um __init__, um __repr__ e um __eq__. O módulo dataclasses gera tudo isso a partir de simples declarações de campos.
- Menos código para escrever e ler.
- Menos chances de erros de digitação em
__init__. - Faz parte da biblioteca padrão desde o Python 3.7.
A maneira antiga
Aqui está uma classe comum que armazena um ponto. Observe quanto código é necessário apenas para armazenar dois números.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(1, 2)
print(p.x, p.y)O decorador @dataclass
Aplique @dataclass acima de uma classe e declare os campos com anotações de tipo. O Python gera __init__ automaticamente.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p.x, p.y)__repr__ automático
As classes de dados também criam um __repr__ legível, para que imprimir o objeto mostre seus campos em vez de um endereço de memória.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(3, 4))__eq__ automático
Duas instâncias de classes de dados são consideradas iguais quando todos os seus campos são iguais. Não é necessário escrever __eq__ manualmente.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(1, 2) == Point(1, 2))
print(Point(1, 2) == Point(9, 9))As anotações de tipo são obrigatórias
Cada campo deve ter uma anotação de tipo. É essa anotação que informa ao mecanismo de classes de dados que o nome é um campo. Uma atribuição simples sem anotação se torna um atributo comum da classe, não um campo.
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
u = User('Alice', 30)
print(u)Adicionando métodos
Uma classe de dados continua sendo uma classe normal. Pode adicionar métodos comuns que usam os campos gerados.
from dataclasses import dataclass
@dataclass
class Rectangle:
width: int
height: int
def area(self):
return self.width * self.height
r = Rectangle(3, 4)
print(r.area())Alterando campos
Por padrão, as instâncias de classes de dados são mutáveis, portanto pode reatribuir campos depois da criação, assim como faria com atributos normais.
from dataclasses import dataclass
@dataclass
class Counter:
value: int
c = Counter(0)
c.value += 5
print(c.value)asdict e astuple
As funções auxiliares asdict() e astuple() convertem uma instância em um dicionário ou uma tupla, o que é útil para serialização.
from dataclasses import dataclass, asdict, astuple
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(asdict(p))
print(astuple(p))Classes de dados aninhadas
Um campo de uma classe de dados pode ser outra classe de dados. O __repr__ gerado e asdict() percorrem recursivamente as estruturas aninhadas.
from dataclasses import dataclass, asdict
@dataclass
class Address:
city: str
@dataclass
class Person:
name: str
address: Address
p = Person('Bob', Address('Paris'))
print(asdict(p))Quando usar classes de dados
Recorra a uma classe de dados quando uma classe servir principalmente para agrupar valores relacionados.
- Objetos de configuração.
- Registros retornados por uma função.
- Tipos simples de valores, como coordenadas ou dinheiro.
Para classes dominadas pelo comportamento, e não pelos dados, uma classe comum pode ser mais clara.
Verificação rápida
O que o decorador @dataclass gera automaticamente?
Recapitulação
Aprendeu a usar @dataclass para eliminar código repetitivo.
- Declare os campos com anotações de tipo.
__init__,__repr__e__eq__são gerados.- Use
asdict()eastuple()para converter instâncias. - Ainda pode adicionar métodos e aninhar classes de dados.
Perguntas Frequentes
A aula “Definindo uma classe de dados” é grátis?
Sim — o texto completo de “Definindo uma classe de dados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “Definindo uma classe de dados”?
Use @dataclass para remover código repetitivo. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Definindo uma classe de dados”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Definindo uma classe de dados
- Valores padrão e field()
- Opções de imutabilidade e comparação
- A biblioteca attrs