Classe de dados Python:uma maneira melhor de armazenar dados
Uma classe de dados Python é uma classe Python regular que tem o
@dataclass
decorador. Ele é criado especificamente para armazenar dados. Desde a versão 3.7 do Python, o Python oferece classes de dados por meio de um módulo integrado chamado dataclass
. Existem várias vantagens sobre as classes regulares do Python que exploraremos neste artigo. Também veremos o código de exemplo e algumas operações comuns que você pode querer realizar com classes de dados. Índice
A vantagem de usar classes de dados
Por que você deve usar uma classe de dados em vez de uma classe Python regular? Primeiro, vamos ver algumas das vantagens que uma classe de dados Python tem a oferecer.
Requer uma quantidade mínima de código
O
@dataclass
decorator adiciona muitas funcionalidades a uma classe sem adicionar nenhum código visível. Isso permite que sua classe de dados seja muito compacta enquanto ainda oferece muitos recursos úteis. Tudo o que você precisa fazer é definir os campos para armazenar seus dados. Você não precisa definir nenhuma função. Comparação
Duas classes de dados Python podem ser comparadas com
==
porque o chamado método dunder __eq__ é implementado automaticamente. Em geral, podemos comparar qualquer objeto Python que implemente esse método especial com outros objetos do mesmo tipo. Imprimindo uma classe de dados
Da mesma forma, porque
__repr__
é implementado, você pode imprimir classes de dados e obter uma boa representação disso. Isso é especialmente útil para depuração. As classes de dados requerem dicas de tipo
As classes de dados são construídas em torno do novo sistema de tipos que o Python oferece. O uso de dicas de tipo reduz as chances de bugs e comportamento inesperado em seu código. Você essencialmente declara o tipo de dados que deve ser armazenado em uma variável.
Exemplo de classe de dados Python
Aqui está um exemplo de uma classe de dados no trabalho:
from dataclasses import dataclass @dataclass class Card: rank: str suit: str card1 = Card("Q", "hearts") card2 = Card("Q", "hearts") print(card1 == card2) # True print(card1.rank) # 'Q' print(card1) Card(rank='Q', suit='hearts')
Valores padrão
Uma classe de dados pode ter valores padrão. A atribuição de valores padrão é tão simples quanto atribuir um valor a uma variável. Por exemplo, para fazer com que nossa classe Card tenha um valor padrão de Rainha de copas, podemos fazer o seguinte:
from dataclasses import dataclass @dataclass class Card: rank: str = 'Q' suit: str = 'hearts'
Convertendo uma classe de dados em JSON
Um caso de uso comum é converter sua classe de dados bem estruturada em JSON. Por exemplo, se você deseja exportar os dados para um banco de dados ou enviá-los para o navegador. A má notícia aqui:não há uma maneira integrada de converter uma classe de dados em JSON.
A boa notícia é que existe um pacote Python chamado dataclasses-json que simplifica a tarefa. No entanto, requer um decorador extra. Você precisará instalar o pacote com o comando pip install ou algo como Pipenv, de preferência dentro de um ambiente virtual. Por exemplo:
$ pip install dataclasses-json
Aqui está um exemplo de como você pode usar o pacote:
from dataclasses import dataclass from dataclasses_json import dataclass_json @dataclass_json @dataclass class Card: rank: str = 'Q' suit: str = 'hearts' card = Card() print(card.to_json())
{"rank": "Q", "suit": "hearts"}
Outro método é usar a herança do Python e herdar da classe JSONEncoder para criar seu próprio codificador personalizado. A vantagem aqui é que você não precisa instalar um pacote externo. Você pode aprender como fazer isso nesta postagem do blog.
Continue aprendendo
- O pacote Python attrs tem uma versão avançada da classe de dados nativa do Python
- A documentação oficial em Python.org
- Como retornar vários valores em Python
python
- Tipos de dados Python
- Conversão de tipo Python e conversão de tipo
- Operadores Python
- Exceções personalizadas do Python
- Programação Orientada a Objetos Python
- Herança Python
- Como a consolidação do data center está mudando a maneira como armazenamos dados
- type() e isinstance() em Python com exemplos
- Java - Estruturas de Dados
- Abstração de dados em C++