doc: Suggest to hash(tuple of attr) rather than XOR

Issue #28383: __hash__ documentation recommends naive XOR to combine but this
is suboptimal. Update the doc to suggest to reuse the hash() method using a
tuple, with an example.
This commit is contained in:
Victor Stinner 2016-12-19 13:09:28 +01:00
parent bfbc29cb8f
commit 509476b370
1 changed files with 8 additions and 5 deletions

View File

@ -1305,11 +1305,14 @@ Basic customization
Called by built-in function :func:`hash` and for operations on members of
hashed collections including :class:`set`, :class:`frozenset`, and
:class:`dict`. :meth:`__hash__` should return an integer. The only
required property is that objects which compare equal have the same hash
value; it is advised to somehow mix together (e.g. using exclusive or) the
hash values for the components of the object that also play a part in
comparison of objects.
:class:`dict`. :meth:`__hash__` should return an integer. The only required
property is that objects which compare equal have the same hash value; it is
advised to mix together the hash values of the components of the object that
also play a part in comparison of objects by packing them into a tuple and
hashing the tuple. Example::
def __hash__(self):
return hash((self.name, self.nick, self.color))
.. note::