From 003be529323a395be4a17c779aff7e4737170bbf Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 3 May 2011 11:01:32 -0700 Subject: Fix __hash__ in functools.cmp_to_key() to work with collections.Hashable. --- Lib/functools.py | 3 +-- Lib/test/test_functools.py | 5 ++++- Misc/NEWS | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Lib/functools.py b/Lib/functools.py index e92a2fc..90642a5 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -111,8 +111,7 @@ def cmp_to_key(mycmp): return mycmp(self.obj, other.obj) >= 0 def __ne__(self, other): return mycmp(self.obj, other.obj) != 0 - def __hash__(self): - raise TypeError('hash not implemented') + __hash__ = None return K _CacheInfo = namedtuple("CacheInfo", "hits misses maxsize currsize") diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index 73a77d6..7d11b53 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -1,4 +1,5 @@ import functools +import collections import sys import unittest from test import support @@ -446,7 +447,8 @@ class TestCmpToKey(unittest.TestCase): return y - x key = functools.cmp_to_key(mycmp) k = key(10) - self.assertRaises(TypeError, hash(k)) + self.assertRaises(TypeError, hash, k) + self.assertFalse(isinstance(k, collections.Hashable)) class TestTotalOrdering(unittest.TestCase): @@ -660,6 +662,7 @@ def test_main(verbose=None): TestPythonPartial, TestUpdateWrapper, TestTotalOrdering, + TestCmpToKey, TestWraps, TestReduce, TestLRU, diff --git a/Misc/NEWS b/Misc/NEWS index 8ca2f02..f77befd 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -81,6 +81,8 @@ Library - logging: don't define QueueListener if Python has no thread support. +- functools.cmp_to_key() now works with collections.Hashable(). + - Issue #11277: mmap.mmap() calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a mmap bug with sparse files. Patch written by Steffen Daode Nurpmeso. -- cgit v0.12