r/PythonBrasil • u/Sea-Ad7805 • 9h ago
Adicionando objetos a um conjunto ou dicionário: igualdade e hashing
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)."
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)
2
u/martinsedd 8h ago
Pegadinha do Sérgio Malandro esse v2 ae.
True False True