Dataclasses no Python

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

Salve salve Pythonista!

Neste artigo, vamos falar sobre as dataclasses no Python, uma funcionalidade introduzida na versão 3.7 da linguagem.

As dataclasses são uma forma simplificada de criar classes que armazenam dados, proporcionando uma maneira fácil e rápida de implementar classes com atributos e métodos específicos para manipulação de dados.

Vamos ver sua utilidade e como podemos definí-las no Python.

Então vamos nessa!

Vá Direto ao Assunto…

Por que utilizar dataclasses?

É comum em Python utilizarmos classes para representar estruturas de dados, como por exemplo, um usuário com nome, idade e email.

Para criar essa classe, precisamos definir os atributos, o método construtor, métodos e outras funcionalidades específicas.

Isso pode ser um pouco trabalhoso e propenso a erros.

As dataclasses surgem como uma solução para tornar esse processo de criação de classes para armazenamento de dados mais simples, reduzindo a quantidade de código necessário.

Com as dataclasses, podemos criar essas classes de forma mais declarativa e legível, concentrando apenas na definição dos atributos e deixando o Python gerar o código necessário automaticamente.

Como utilizar dataclasses

Para usar as dataclasses, precisamos importar o módulo dataclasses.

Vamos começar criando uma classe simples que representa um usuário:

1
2
3
4
5
6
7
import dataclasses

@dataclasses.dataclass
class Usuario:
    nome: str
    idade: int
    email: str

Essa classe é decorada com o @dataclasses.dataclass, indicando que queremos utilizar a funcionalidade de dataclass do Python.

Em seguida, declaramos os atributos da classe, junto com os seus tipos.

A partir desse momento, o Python já faz automaticamente algumas coisas para nós:

  • Cria um método construtor que recebe os valores dos atributos e atribui esses valores aos atributos correspondentes;
  • Cria métodos getters e setters para cada atributo;
  • Implementa os métodos especiais __repr__ e __eq__ para exibição amigável do objeto e comparação de igualdade, respectivamente.

Agora, podemos criar objetos dessa classe e acessar seus atributos da seguinte forma, assim como fazemos com classes comuns:

1
2
3
4
5
usuario1 = Usuario("João", 25, "[email protected]")

print(usuario1.nome)
print(usuario1.idade)
print(usuario1.email)

Ao executar esse código, teremos a seguinte saída:

1
2
3
João
25
[email protected]

Podemos também modificar os valores dos atributos:

1
2
3
4
5
6
7
usuario1.nome = "Maria"
usuario1.idade = 30
usuario1.email = "[email protected]"

print(usuario1.nome)
print(usuario1.idade)
print(usuario1.email)

Agora teremos a seguinte saída:

1
2
3
Maria
30
[email protected]

Como podemos perceber, o Python nos permite trabalhar facilmente com as dataclasses, tanto na criação quanto na modificação dos valores dos atributos.

E aí, tá curtindo? Que tal aprender Python e Django DE VERDADE em um curso prático, voltado pro mercado?! :point_down:

Jornada Python Jornada Python

Atributos opcionais e valores padrão

Em algumas situações, pode ser necessário definir atributos opcionais em nossas dataclasses.

Para isso, basta definir o valor padrão como None ou algum outro valor desejado:

1
2
3
4
5
@dataclasses.dataclass
class Usuario:
    nome: str
    idade: int = 0
    email: str = None

Agora podemos criar objetos da classe Usuario sem fornecer todos os atributos:

1
2
3
4
5
6
7
8
9
10
usuario1 = Usuario("João")
usuario2 = Usuario("Maria", 30)

print(usuario1.nome)
print(usuario1.idade)
print(usuario1.email)

print(usuario2.nome)
print(usuario2.idade)
print(usuario2.email)

A saída será:

1
2
3
4
5
6
João
0
None
Maria
30
None

Dessa forma, podemos criar objetos da classe Usuario com diferentes combinações de atributos obrigatórios e opcionais.

Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

Métodos personalizados

Além de gerar automaticamente os métodos getters e setters, as dataclasses nos permitem implementar os nossos próprios métodos personalizados.

Esses métodos podem ser implementados normalmente, como em qualquer outra classe.

Vamos adicionar um método saudacao à nossa classe Usuario, que retorna uma saudação personalizada com nome e idade do usuário:

1
2
3
4
5
6
7
8
@dataclasses.dataclass
class Usuario:
    nome: str
    idade: int = 0
    email: str = None
    
    def saudacao(self):
        return f"Olá, meu nome é {self.nome} e tenho {self.idade} anos."

Agora podemos invocar esse método em um objeto da classe Usuario:

1
2
3
4
5
usuario1 = Usuario("João", 25)
usuario2 = Usuario("Maria", 30)

print(usuario1.saudacao())
print(usuario2.saudacao())

A saída será:

1
2
Olá, meu nome é João e tenho 25 anos.
Olá, meu nome é Maria e tenho 30 anos.

Podemos adicionar quantos métodos desejarmos às nossas dataclasses, tornando-as mais ricas em funcionalidades de acordo com as necessidades da nossa aplicação.

Comparação de objetos

Ao criar uma dataclass, o Python automaticamente implementa o método especial __eq__ para realizar a comparação de igualdade entre objetos.

Esse método compara os valores dos atributos das instâncias, garantindo que dois objetos sejam considerados iguais se seus atributos tiverem os mesmos valores.

1
2
3
4
5
6
usuario1 = Usuario("João", 25, "[email protected]")
usuario2 = Usuario("Maria", 30, "[email protected]")
usuario3 = Usuario("João", 25, "[email protected]")

print(usuario1 == usuario2)
print(usuario1 == usuario3)

A saída será:

1
2
False
True

Como podemos observar, a comparação usuario1 == usuario2 retorna False, pois os valores dos atributos são diferentes, enquanto a comparação usuario1 == usuario3 retorna True, uma vez que os objetos têm os mesmos valores para os atributos.

Conclusão

As dataclasses são uma adição muito útil ao Python para simplificar a criação de classes de armazenamento de dados.

Com elas, podemos definir classes com atributos tipados de forma mais declarativa, e o Python se encarrega de gerar o código necessário para construir e manipular essas classes.

Neste artigo, vimos como utilizar dataclasses no Python, declarando os atributos das classes e aproveitando todas as funcionalidades geradas automaticamente.

Além disso, exploramos a criação de atributos opcionais, valores padrão, métodos personalizados e a comparação de igualdade entre objetos.

As dataclasses são uma ferramenta poderosa e muito útil para desenvolvimento em Python, tornando o código mais limpo, legível e produtivo.

Espero que este artigo tenha sido útil para você entender o que são as dataclasses no Python e como utilizá-las em suas aplicações.

Experimente utilizar dataclasses em seus projetos e desfrute de toda a praticidade e produtividade que elas oferecem.

Nos vemos no próximo Artigo aqui do Blog!

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.