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: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 60A mesma classe pode ser definida usando o dataclass da seguinte forma:
De Dataclasses Importar DataclassA 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 60Observe 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 DataclassUm 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:
150Variá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 DataclassNa 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:
150Os 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 DataclassO 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:
210Criando 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 dataclassesO 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 DataclassDepois de executar as duas amostras de código acima, você deve obter a seguinte saída:
210Por 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.