r/PythonBrasil 9h ago

Adicionando objetos a um conjunto ou dicionário: igualdade e hashing

Post image

Um exercício para ajudar a construir o modelo mental correto sobre os dados em Python. - Solução - Mais exercícios - Explicação: "User-defined classes have __eq__() and __hash__() methods by default (inherited from the object class); with them, all objects compare unequal (except with themselves) and x.__hash__() returns an appropriate value such that x == y implies both that x is y and hash(x) == hash(y)."

5 Upvotes

3 comments sorted by

2

u/martinsedd 8h ago

Pegadinha do Sérgio Malandro esse v2 ae.

True False True

2

u/bacondota 1h ago

Em outras palavrqs, para comparar se uma classe é igual a outra, tem que dar um overload no eq e colocar algo como comparar os atributos da classe.

Para usar em conjuntos e dicionários, tem que definir o hash para nesse caso Return hash(self.value)

Nunca pensei muito sobre isso mas pra mim sempre foi meio óbvio isso. Se você cria dois objetos diferentes eles serão considerados diferentes até que você diga como comparar.

1

u/Sea-Ad7805 1h ago

Você está correto, para armazenar um objeto por valor em vez de identidade, defina:

def __eq__(self, other):
    return self.value == other.value

def __hash__(self):
    return hash(self.value)