Issue 2235: document PyObject_HashNotImplemented

This commit is contained in:
Nick Coghlan 2008-08-18 13:14:22 +00:00
parent f70385a5c3
commit 6e8fef07e5
3 changed files with 21 additions and 0 deletions

View File

@ -269,6 +269,16 @@ is considered sufficient for this determination.
This is the equivalent of the Python expression ``hash(o)``. This is the equivalent of the Python expression ``hash(o)``.
.. cfunction:: long PyObject_HashNotImplemented(PyObject *o)
Set a TypeError indicating that ``type(o)`` is not hashable and return ``-1``.
This function receives special treatment when stored in a ``tp_hash`` slot,
allowing a type to explicit indicate to the interpreter that it is not
hashable.
.. versionadded:: 2.6
.. cfunction:: int PyObject_IsTrue(PyObject *o) .. cfunction:: int PyObject_IsTrue(PyObject *o)
Returns ``1`` if the object *o* is considered to be true, and ``0`` otherwise. Returns ``1`` if the object *o* is considered to be true, and ``0`` otherwise.

View File

@ -324,6 +324,14 @@ type objects) *must* have the :attr:`ob_size` field.
error occurs during the computation of the hash value, the function should set error occurs during the computation of the hash value, the function should set
an exception and return ``-1``. an exception and return ``-1``.
This field can be set explicitly to :cfunc:`PyObject_HashNotImplemented` to
block inheritance of the hash method from a parent type. This is interpreted
as the equivalent of ``__hash__ = None`` at the Python level, causing
``isinstance(o, collections.Hashable)`` to correctly return ``False``. Note
that the converse is also true - setting ``__hash__ = None`` on a class at
the Python level will result in the ``tp_hash`` slot being set to
:cfunc:`PyObject_HashNotImplemented`.
When this field is not set, two possibilities exist: if the :attr:`tp_compare` When this field is not set, two possibilities exist: if the :attr:`tp_compare`
and :attr:`tp_richcompare` fields are both *NULL*, a default hash value based on and :attr:`tp_richcompare` fields are both *NULL*, a default hash value based on
the object's address is returned; otherwise, a :exc:`TypeError` is raised. the object's address is returned; otherwise, a :exc:`TypeError` is raised.

View File

@ -166,6 +166,9 @@ Build
Documentation Documentation
------------- -------------
- Issue #2235: the C API function PyObject_HashNotImplemented and its
interaction with the tp_hash slot (added in 2.6b2) are now documented
- Issue #643841: The language reference now provides more detailed - Issue #643841: The language reference now provides more detailed
coverage of the lookup process for special methods. The disclaimers coverage of the lookup process for special methods. The disclaimers
regarding lack of coverage of new-style classes have also been regarding lack of coverage of new-style classes have also been