Qual é o padrão __hash__ em python?
Frequentemente estou usando coisas interessantes como chaves para dicionários e, portanto, estou me perguntando qual é o caminho certo para fazê-lo - e isso passa pela implementação de bons métodos de hash para meus objetos. Estou ciente de outras perguntas aqui comoboa maneira de implementarjogo da velha, mas eu gostaria de entender como o padrão__hash__
funciona para objetos personalizados, e se é possível confiar nele.
Tenho notado que os mutáveis são explicitamente indecifráveishash({})
gera um erro ... mas, estranhamente, classes customizadas são hashable:
>>> class Object(object): pass
>>> o = Object()
>>> hash(o)
Então, alguém sabe como funciona essa função hash padrão? Compreendendo isso, gostaria de saber:
Posso confiar neste hash padrão, se eu colocar objetos de um mesmo tipo como chaves de um dicionário? por exemplo. :
key1 = MyObject()
key2 = MyObject()
key3 = MyObject()
{key1: 1, key2: 'blabla', key3: 456}
Posso confiar nele se usar objetos de tipos diferentes como chaves em um dicionário? por exemplo.
{int: 123, MyObject(10): 'bla', 'plo': 890}
E no último caso também, como garantir que meus hashes personalizados não entrem em conflito com os hashes internos? por exemplo :
{int: 123, MyObject(10): 'bla', MyObjectWithCustomHash(123): 890}