diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2016-12-19 13:09:28 +0100 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2016-12-19 13:09:28 +0100 |
commit | 905b7ec9f7d8ed8720785f461256cb2ea2bcdb65 (patch) | |
tree | c7cda49a27a349bd8e8ccff7a5beba0c1eaa110e /Doc/reference/datamodel.rst | |
parent | d990f8196bdd1306bcecab4803ada8919e178a8f (diff) | |
download | cpython-905b7ec9f7d8ed8720785f461256cb2ea2bcdb65.tar.gz |
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.
Diffstat (limited to 'Doc/reference/datamodel.rst')
-rw-r--r-- | Doc/reference/datamodel.rst | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index b763f10eeb..73eec1c557 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -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:: |