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 TypeErrorConversores
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 FrozenInstanceErrorComparaçã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.
@definecorresponde a@dataclass.attrs.fieldcorresponde adataclasses.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
- Definindo uma classe de dados
- Valores padrão e field()
- Opções de imutabilidade e comparação
- A biblioteca attrs