SF bug #800796: Difference between hash() and __hash__()

slice(5).__hash__() now raises a TypeError.
This commit is contained in:
Raymond Hettinger 2003-09-05 14:27:30 +00:00
parent a1a1dba2d4
commit b859c070ef
2 changed files with 13 additions and 1 deletions

View File

@ -14,6 +14,11 @@ def test_constructor(self):
def test_repr(self):
self.assertEqual(repr(slice(1, 2, 3)), "slice(1, 2, 3)")
def test_hash(self):
# Verify clearing of SF bug #800796
self.assertRaises(TypeError, hash, slice(5))
self.assertRaises(TypeError, slice(5).__hash__)
def test_cmp(self):
s1 = slice(1, 2, 3)
s2 = slice(1, 2, 3)

View File

@ -278,6 +278,13 @@ slice_compare(PySliceObject *v, PySliceObject *w)
return result;
}
static long
slice_hash(PySliceObject *v)
{
PyErr_SetString(PyExc_TypeError, "unhashable type");
return -1L;
}
PyTypeObject PySlice_Type = {
PyObject_HEAD_INIT(&PyType_Type)
0, /* Number of items for varobject */
@ -293,7 +300,7 @@ PyTypeObject PySlice_Type = {
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
(hashfunc)slice_hash, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
PyObject_GenericGetAttr, /* tp_getattro */