diff options
-rw-r--r-- | Lib/test/test_operator.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Objects/abstract.c | 2 |
3 files changed, 6 insertions, 0 deletions
diff --git a/Lib/test/test_operator.py b/Lib/test/test_operator.py index c1fe88cbef..3cc0f1e837 100644 --- a/Lib/test/test_operator.py +++ b/Lib/test/test_operator.py @@ -215,6 +215,8 @@ class OperatorTestCase(unittest.TestCase): self.failUnless(operator.isSequenceType(xrange(10))) self.failUnless(operator.isSequenceType('yeahbuddy')) self.failIf(operator.isSequenceType(3)) + class Dict(dict): pass + self.failIf(operator.isSequenceType(Dict())) def test_lshift(self): self.failUnlessRaises(TypeError, operator.lshift) @@ -103,6 +103,8 @@ Core and builtins Extension Modules ----------------- +- Bug #1575169: operator.isSequenceType() now returns False for subclasses of dict. + - collections.defaultdict() now verifies that the factory function is callable. - Bug #1486663: don't reject keyword arguments for subclasses of builtin diff --git a/Objects/abstract.c b/Objects/abstract.c index 7115c523c2..7462c58dec 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1157,6 +1157,8 @@ PySequence_Check(PyObject *s) { if (s && PyInstance_Check(s)) return PyObject_HasAttrString(s, "__getitem__"); + if (PyObject_IsInstance(s, &PyDict_Type)) + return 0; return s != NULL && s->ob_type->tp_as_sequence && s->ob_type->tp_as_sequence->sq_item != NULL; } |