[Python-3000-checkins] r58824 - python/branches/py3k/Doc/reference/datamodel.rst

Guido van Rossum guido at python.org
Sat Nov 3 16:13:29 CET 2007


Actually, this should probably be rewritten for 3.0 since it doesn't
support __cmp__.

On 11/3/07, georg.brandl <python-3000-checkins at python.org> wrote:
> Author: georg.brandl
> Date: Sat Nov  3 09:44:43 2007
> New Revision: 58824
>
> Modified:
>    python/branches/py3k/Doc/reference/datamodel.rst
> Log:
> Re-add two paragraphs that seem to have been lost during the merge from trunk.
>
>
> Modified: python/branches/py3k/Doc/reference/datamodel.rst
> ==============================================================================
> --- python/branches/py3k/Doc/reference/datamodel.rst    (original)
> +++ python/branches/py3k/Doc/reference/datamodel.rst    Sat Nov  3 09:44:43 2007
> @@ -1289,8 +1289,7 @@
>     instances are compared by object identity ("address").  See also the
>     description of :meth:`__hash__` for some important notes on creating
>     :term:`hashable` objects which support custom comparison operations and are
> -   usable as dictionary keys. (Note: the restriction that exceptions are not
> -   propagated by :meth:`__cmp__` has been removed since Python 1.5.)
> +   usable as dictionary keys.
>
>
>  .. method:: object.__hash__(self)
> @@ -1307,8 +1306,18 @@
>     (e.g., using exclusive or) the hash values for the components of the object that
>     also play a part in comparison of objects.
>
> -   :meth:`__hash__` may also return a long integer object; the 32-bit integer is
> -   then derived from the hash of that object.
> +   If a class does not define a :meth:`__cmp__` or :meth:`__eq__` method it
> +   should not define a :meth:`__hash__` operation either; if it defines
> +   :meth:`__cmp__` or :meth:`__eq__` but not :meth:`__hash__`, its instances
> +   will not be usable as dictionary keys.  If a class defines mutable objects
> +   and implements a :meth:`__cmp__` or :meth:`__eq__` method, it should not
> +   implement :meth:`__hash__`, since the dictionary implementation requires that
> +   a key's hash value is immutable (if the object's hash value changes, it will
> +   be in the wrong hash bucket).
> +
> +   User-defined classes have :meth:`__cmp__` and :meth:`__hash__` methods
> +   by default; with them, all objects compare unequal and ``x.__hash__()``
> +   returns ``id(x)``.
>
>
>  .. method:: object.__bool__(self)
> _______________________________________________
> Python-3000-checkins mailing list
> Python-3000-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-3000-checkins
>


-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-3000-checkins mailing list