0Pricing
Python Academy · Aula

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() e astuple() 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

  1. Definindo uma classe de dados
  2. Valores padrão e field()
  3. Opções de imutabilidade e comparação
  4. A biblioteca attrs
← Voltar para Python Academy