[Python-checkins] r65810 - in python/trunk: Doc/c-api/object.rst Doc/c-api/typeobj.rst Misc/NEWS
nick.coghlan
python-checkins at python.org
Mon Aug 18 15:14:22 CEST 2008
Author: nick.coghlan
Date: Mon Aug 18 15:14:22 2008
New Revision: 65810
Log:
Issue 2235: document PyObject_HashNotImplemented
Modified:
python/trunk/Doc/c-api/object.rst
python/trunk/Doc/c-api/typeobj.rst
python/trunk/Misc/NEWS
Modified: python/trunk/Doc/c-api/object.rst
==============================================================================
--- python/trunk/Doc/c-api/object.rst (original)
+++ python/trunk/Doc/c-api/object.rst Mon Aug 18 15:14:22 2008
@@ -269,6 +269,16 @@
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)
Returns ``1`` if the object *o* is considered to be true, and ``0`` otherwise.
Modified: python/trunk/Doc/c-api/typeobj.rst
==============================================================================
--- python/trunk/Doc/c-api/typeobj.rst (original)
+++ python/trunk/Doc/c-api/typeobj.rst Mon Aug 18 15:14:22 2008
@@ -324,6 +324,14 @@
error occurs during the computation of the hash value, the function should set
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`
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.
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS (original)
+++ python/trunk/Misc/NEWS Mon Aug 18 15:14:22 2008
@@ -166,6 +166,9 @@
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
coverage of the lookup process for special methods. The disclaimers
regarding lack of coverage of new-style classes have also been
More information about the Python-checkins
mailing list