Classes de dados em Python
As classes gerais encontradas em Python ou qualquer outra linguagem de programação são projetadas para representar uma entidade. Como eles representam uma entidade, eles são preenchidos com muitas funções, lógicas e atributos, onde cada função executa uma tarefa específica e os atributos de classe são manipulados usando as funções de classe.
Além das classes gerais, existe ainda outro tipo de classe, a saber, classe de dados. Este artigo falará sobre classes de dados encontradas não apenas em Python, mas também em outras linguagens de programação.
Python DataClass
Ao contrário dessas classes regulares, as classes de dados são voltadas para armazenar o estado de uma entidade. Eles não contêm muita lógica. Eles armazenam alguns dados que representam estatísticas de um objeto ou entidade.
Vamos entender melhor as classes de dados com um exemplo. Por exemplo, você está escrevendo um programa que tenta imitar o comportamento de um carrinho de compras em uma loja de roupas. O carrinho de compras conterá produtos ou roupas. Considere que existem três tipos de roupa, nomeadamente, Chapéus
, Topwear
e Bottomwear
. Uma vez que nem todos os gêneros podem usar todos os tecidos, também temos informações sobre o gênero para o qual o tecido é fabricado. Consideremos apenas três categorias: Masculino
, Feminino
e Neutro (ambos podem usar)
. Cada produto tem um nome, preço, tamanho e empresa pela qual foi fabricado.
Agora, se temos que criar um programa que imite um carrinho de compras, podemos criar duas classes, a saber, ShoppingCart
e Product
. A classe ShoppingCart
conterá toda a lógica, como adicionar e retirar produtos, manipular a quantidade de produtos, controlar os produtos presentes no carrinho, etc. E, um único produto será representado pela classe Product
. Product
é uma classe de dados e representará apenas um produto.
A classe Produto
será parecida com isto.
class Product:
"""
A class representing a product
"""
def __init__(self, name, price, size, company, wearType, gender):
self.name = name
self.price = price
self.size = size
self.company = company
self.wearType = wearType
self.gender = gender
def __hash__(self):
"""
Returns a hash code for the class object
"""
return hash(
(self.name, self.price, self.size, self.company, self.wearType, self.gender)
)
def __eq__(self, other):
"""
Checks weather two objects are equal or not
"""
if not isinstance(other, Product):
return False
else:
return (
self.name,
self.price,
self.size,
self.company,
self.wearType,
self.gender,
) == (
other.name,
other.price,
other.size,
other.company,
other.wearType,
other.gender,
)
Como você pode ver, a classe Product
não possui nenhuma lógica. Tudo o que faz é representar um produto. É assim que uma classe de dados se parece, apenas atributos e lógica mínima.
As duas funções implementadas são necessárias se quisermos que a classe de dados seja hashble. Quando uma classe pode ser hash, seu objeto pode ser usado como uma chave no dicionário e pode ser mapeado para valores fixos. Como um código hash será necessário para mapear os valores, essas duas funções são essenciais.
Também se pode implementar a função __repr__
, um método particular que retorna a representação de string de um objeto de classe.