Обложка канала

Библиотека Python разработчика

20835 @BookPython

Библиотека Python разработчика. Книги по программированию на Python.

Библиотека Python разработчика

4 года назад
Открыть в
To be used as a dictionary key, an object should be hashable. Hashable objects support the __hash__ method that returns an integer value. To get a hash of the value, the hash built-in function is used. Built-in types that are not mutable are hashable by default. All custom objects are also hashable, but there is a catch. If you define __eq__ method for your custom type, then you should define such __hash__ that hash(a) == hash(b) for every a and b that are equal. Violating this rule may result in dictionary malfunctioning: class A: def __init__(self, x): self.x = x def __hash__(self): return random.randrange(10000) def __eq__(self, other): return self.x == other.x In : d = {} In : d[A(2)] = 2 In : d.get(A(2), 0) Out: 0 Mind that though once you define __eq__ in the class, the default __hash__ method is removed since the default implementation is no longer suitable (with it all values are unequal).