Como usar Dataclasses em Python

Como usar Dataclasses em Python
Este artigo abordará um guia sobre o uso dos novos objetos "dataclass" incluídos no Python 3.7 e versões mais recentes. Dataclasses são como outras classes Python, mas são especialmente projetadas para serem usadas como contêineres de dados e fornecem uma sintaxe mais limpa e curta para criar rapidamente objetos de dados. Se você conhece objetos "nomeado" nomeado "e os usou no python, pode defini -los como mutáveis ​​de nome de nome de nome. Você pode criar novas instâncias de dataclasses como qualquer outra classe ou objetos do tipo NomeTuple e acessar seus atributos usando a notação de ponto.

Sintaxe e uso básicos

Para entender um dataclass e sua sintaxe, você precisa entender o layout e a estrutura básicos de uma classe python primeiro. Abaixo está um exemplo mostrando uma classe Python simples:

StockInhand de classe:
def __init __ (self, maçãs, laranjas, mangas):
auto.Maçãs = maçãs
auto.laranjas = laranjas
auto.mangas = mangas
Stock = StockInhand (40, 50, 60)
Imprimir (caldo.Maçãs, estoque.laranjas, estoque.mangas)

Na amostra de código acima, uma nova classe chamada "Stockinhand" foi criada com um método "__init__" definido dentro dela. O método __init__ é invocado automaticamente sempre que você criar uma nova instância da classe StockInHand. Nesse caso, o método __init__ foi definido com alguns argumentos obrigatórios. Portanto, você não pode criar uma nova instância do StockInhand sem alguns valores para os argumentos necessários. O argumento "eu" fornece uma referência à instância de uma classe, para que você possa usá -lo para se referir a qualquer variável ou método dentro de uma classe, desde que essas variáveis ​​e métodos tenham sido definidos usando o uso do auto -argumento. O argumento próprio atua como uma ferramenta de conveniência e pode ser nomeado qualquer coisa. Você também pode omitir completamente. Nas últimas declarações, uma nova instância da classe StockInhand é criada e suas variáveis ​​são acessadas usando a notação de ponto.

Depois de executar a amostra de código acima, você deve obter a seguinte saída:

40 50 60

A mesma classe pode ser definida usando o dataclass da seguinte forma:

De Dataclasses Importar Dataclass
@dataclass
StockInhand de classe:
Maçãs: int
laranjas: int
mangas: int
Stock = StockInhand (40, 50, 60)
Imprimir (caldo.Maçãs, estoque.laranjas, estoque.mangas)

A primeira declaração importa o decorador "Dataclass" do módulo "Dataclasses". Os decoradores podem ser usados ​​para modificar o comportamento dos objetos Python sem realmente alterá -los. Nesse caso, o decorador do dataclass é predefinido e vem do módulo Dataclasses. Para definir um dataclass, você precisa anexar o decorador de dataclass usando o símbolo "@" a uma classe python, como mostrado no exemplo de código acima. Nas próximas declarações, as variáveis ​​no dataclass são definidas usando dicas de tipo para indicar que tipo de objeto elas são. Dicas de tipo foram introduzidas no Python 3.6 e eles são definidos usando símbolos “:” (cólon). Você pode criar uma nova instância de Dataclass como qualquer outra classe Python. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

40 50 60

Observe que, se um método no Dataclass retornar um valor, você poderá atribuir uma dica de tipo usando o símbolo “->”. Aqui está um exemplo:

De Dataclasses Importar Dataclass
@dataclass
StockInhand de classe:
Maçãs: int
laranjas: int
mangas: int
def total_stock (self) -> int:
retornar a si mesmo.Maçãs + self.laranjas + eu.mangas
Stock = StockInhand (40, 50, 60)
Imprimir (caldo.total_stock ())

Um novo método chamado "total_stock" foi criado e uma dica de tipo usando a palavra -chave "int" reservada foi atribuída a ele para indicar o tipo de valor de retorno. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

150

Variáveis ​​em objetos de dataclass podem ter valores padrão

Você pode atribuir valores padrão aos membros de Dataclasses após dicas de tipo. Aqui está um exemplo:

De Dataclasses Importar Dataclass
@dataclass
StockInhand de classe:
Maçãs: int = 40
laranjas: int = 50
mangas: int = 60
def total_stock (self) -> int:
retornar a si mesmo.Maçãs + self.laranjas + eu.mangas
Stock = StockInHand ()
Imprimir (caldo.total_stock ())

Na segunda última declaração, nenhum argumento foi fornecido durante a criação de uma nova instância de stockinhand dataclass, portanto os valores padrão foram usados. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

150

Os membros do dataclass são mutáveis

Dataclasses são mutáveis, para que você possa alterar o valor de seus membros, recebendo uma referência a eles. Abaixo está uma amostra de código:

De Dataclasses Importar Dataclass
@dataclass
StockInhand de classe:
Maçãs: int = 40
laranjas: int = 50
mangas: int = 60
def total_stock (self) -> int:
retornar a si mesmo.Maçãs + self.laranjas + eu.mangas
Stock = StockInHand ()
estoque.Maçãs = 100
Imprimir (caldo.total_stock ())

O valor da variável de maçãs foi alterado antes de chamar o método total_stock. Depois de executar a amostra de código acima, você deve obter a seguinte saída:

210

Criando um dataclass de uma lista

Você pode criar um dataclass programaticamente usando o método "make_dataclass", conforme mostrado no exemplo de código abaixo:

importar dataclasses
campos = [("maçãs", int, 40), ("laranjas", int, 50), ("mangas", int, 60)]
StockInHand = Dataclasses.make_dataclass (
"Stockinhand", campos,
namespace = 'total_stock': lambda self: self.Maçãs + self.laranjas + eu.mangas
)
Stock = StockInHand ()
estoque.Maçãs = 100
Imprimir (caldo.total_stock ())

O método make_dataclass leva um nome de classe e uma lista de campos de membros como dois argumentos obrigatórios. Você pode definir membros como uma lista de tuplas onde cada tupla contém o nome da variável, sua dica de tipo e seu valor padrão. Definindo o valor padrão não é necessário, você pode omiti -lo para atribuir nenhum valor padrão. O argumento de namespace opcional leva um dicionário que pode ser usado para definir funções de membro usando pares de valores-chave e funções lambda. O código acima é exatamente equivalente a definir o seguinte dataclass manualmente:

De Dataclasses Importar Dataclass
@dataclass
StockInhand de classe:
Maçãs: int = 40
laranjas: int = 50
mangas: int = 60
def total_stock (self):
retornar a si mesmo.Maçãs + self.laranjas + eu.mangas
Stock = StockInHand ()
estoque.Maçãs = 100
Imprimir (caldo.total_stock ())

Depois de executar as duas amostras de código acima, você deve obter a seguinte saída:

210

Por que usar um dataclass em vez de uma classe?

Você pode se perguntar por que usar dataclasses se eles são quase iguais às de outras classes Python? Um dos principais benefícios do uso de dataclasses é sua concisão. Você pode criar dataclasses usando taquigrafia limpa e mínima sem muito código de caldeira. Eles são especialmente projetados para serem usados ​​como contêineres de dados, onde as variáveis ​​podem ser facilmente acessadas usando a notação de ponto, embora você possa usar o dataclasses como classes de pleno direito também. Em termos simples, se você deseja usar uma classe Python apenas para usá -la como um armazenamento de dados, o Dataclass parece ser uma escolha melhor.

Conclusão

Dataclasses em Python fornecem uma maneira mínima de criar rapidamente classes Python destinadas a ser usadas como armazenamento de dados. Você pode obter referências a membros de Dataclasses usando a notação de pontos e eles são especialmente úteis quando você procura dicionários como pares de valor-chave que podem ser acessados ​​usando a notação de ponto.