0Pricing
Python Academy · Aula

A biblioteca attrs

Compare attrs com dataclasses

A biblioteca attrs é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 4 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.

O Que É attrs?

attrs é uma biblioteca de terceiros que criou a ideia de gerar uma classe a partir de campos anos antes de dataclasses entrar na biblioteca padrão. O módulo padrão dataclasses foi diretamente inspirado nela.

  • attrs exige uma instalação separada: pip install attrs.
  • Oferece mais recursos que dataclasses.
  • dataclasses é integrado e atende à maioria das necessidades cotidianas.

A API Moderna de attrs

O attrs moderno usa @define e field() do espaço de nomes attrs. A estrutura é muito semelhante à de uma classe de dados.

from attrs import define, field

@define
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p)

Espaços por Padrão

Uma grande diferença: as classes @define usam __slots__ automaticamente. Isso reduz o uso de memória e impede a adição acidental de atributos não declarados. As classes de dados comuns usam um __dict__ regular, a menos que passe slots=True (Python 3.10+).

Validadores Integrados

attrs inclui validadores prontos para uso. Um campo pode declarar um validador que é executado durante a construção e gera uma exceção se o valor for inválido. dataclasses não tem validação integrada; deve escrevê-la por conta própria em __post_init__.

from attrs import define, field
from attrs.validators import instance_of

@define
class User:
    age: int = field(validator=instance_of(int))

User(30)        # ok
User('oops')    # raises TypeError

Conversores

Um conversor transforma o valor de entrada antes que ele seja armazenado. Por exemplo, pode converter automaticamente uma cadeia de caracteres em um inteiro. Esse é outro recurso que falta a dataclasses.

from attrs import define, field

@define
class Item:
    price: int = field(converter=int)

i = Item('42')   # stored as the integer 42
print(i.price)

O Equivalente em Classes de Dados

Veja a mesma ideia expressa com a biblioteca padrão. A validação e a conversão são inseridas manualmente em __post_init__, pois dataclasses não oferece pontos de extensão por campo.

from dataclasses import dataclass

@dataclass
class Item:
    price: int

    def __post_init__(self):
        self.price = int(self.price)

print(Item('42'))

asdict nas Duas Bibliotecas

As duas bibliotecas fornecem um auxiliar asdict. O de classes de dados fica em dataclasses; o de attrs fica em attrs. O comportamento é quase idêntico.

from dataclasses import dataclass, asdict

@dataclass
class Point:
    x: int
    y: int

print(asdict(Point(1, 2)))

Imutabilidade em attrs

attrs também oferece suporte à imutabilidade. Use @frozen (um atalho para @define(frozen=True)) para criar instâncias somente para leitura, de forma semelhante a @dataclass(frozen=True).

from attrs import frozen

@frozen
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p)
# p.x = 9  would raise FrozenInstanceError

Comparação de Recursos

Veja como se comparam:

  • dataclasses: biblioteca padrão, sem instalação, cobre o básico.
  • attrs: validadores, conversores, espaços por padrão e mais opções de configuração.
  • Ambas geram __init__, __repr__ e __eq__.

Qual Deve Escolher?

Escolha dataclasses para estruturas simples de dados sem uma dependência adicional. Escolha attrs quando precisar de validadores, conversores ou de sua configuração mais rica e estiver confortável em adicionar uma dependência. Muitos projetos começam com dataclasses e só migram quando deixam de atender às suas necessidades.

Uma Herança Compartilhada

Como dataclasses tomou tanta inspiração de attrs, migrar entre as duas bibliotecas costuma ser mecânico: troque a importação e o decorador e ajuste os validadores ou conversores. Conhecer uma torna a outra imediatamente familiar.

  • @define corresponde a @dataclass.
  • attrs.field corresponde a dataclasses.field.
  • Ao migrar para dataclasses, os validadores passam para __post_init__.

Verificação Rápida

Qual recurso attrs oferece que o módulo padrão dataclasses não fornece integrado?

Recapitulação

Comparou attrs com dataclasses.

  • attrs inspirou dataclasses e oferece mais recursos.
  • attrs adiciona validadores, conversores e espaços por padrão.
  • dataclasses é integrado e não exige instalação.
  • Escolha a ferramenta mais simples que atenda às suas necessidades.

Perguntas Frequentes

A aula “A biblioteca attrs” é grátis?

Sim — o texto completo de “A biblioteca attrs” é 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 “A biblioteca attrs”?

Compare attrs com dataclasses 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 4 de 4.

Quanto tempo leva a aula “A biblioteca attrs”?

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