diff options
author | Raymond Hettinger <python@rcn.com> | 2007-01-11 18:22:55 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2007-01-11 18:22:55 (GMT) |
commit | 9fdfadb06ee3c6d182af084afaa97bc6bf4652bc (patch) | |
tree | 98dbbae4cf1e3e87bd32c96c7914af1983912f06 | |
parent | a398e2d0592464b6594bac0e4ee3ef091cce5159 (diff) | |
download | cpython-9fdfadb06ee3c6d182af084afaa97bc6bf4652bc.zip cpython-9fdfadb06ee3c6d182af084afaa97bc6bf4652bc.tar.gz cpython-9fdfadb06ee3c6d182af084afaa97bc6bf4652bc.tar.bz2 |
SF #1486663 -- Allow keyword args in subclasses of set() and frozenset().
-rw-r--r-- | Lib/test/test_set.py | 11 | ||||
-rw-r--r-- | Objects/setobject.c | 4 |
2 files changed, 13 insertions, 2 deletions
diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py index dedd1fb..49bdec3 100644 --- a/Lib/test/test_set.py +++ b/Lib/test/test_set.py @@ -468,6 +468,16 @@ class SetSubclass(set): class TestSetSubclass(TestSet): thetype = SetSubclass +class SetSubclassWithKeywordArgs(set): + def __init__(self, iterable=[], newarg=None): + set.__init__(self, iterable) + +class TestSetSubclassWithKeywordArgs(TestSet): + + def test_keywords_in_subclass(self): + 'SF bug #1486663 -- this used to erroneously raise a TypeError' + SetSubclassWithKeywordArgs(newarg=1) + class TestFrozenSet(TestJointOps): thetype = frozenset @@ -1450,6 +1460,7 @@ def test_main(verbose=None): test_classes = ( TestSet, TestSetSubclass, + TestSetSubclassWithKeywordArgs, TestFrozenSet, TestFrozenSetSubclass, TestSetOfSets, diff --git a/Objects/setobject.c b/Objects/setobject.c index 507a07b..f038ee3 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -1004,7 +1004,7 @@ frozenset_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { PyObject *iterable = NULL, *result; - if (!_PyArg_NoKeywords("frozenset()", kwds)) + if (type == &PyFrozenSet_Type && !_PyArg_NoKeywords("frozenset()", kwds)) return NULL; if (!PyArg_UnpackTuple(args, type->tp_name, 0, 1, &iterable)) @@ -1048,7 +1048,7 @@ PySet_Fini(void) static PyObject * set_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { - if (!_PyArg_NoKeywords("set()", kwds)) + if (type == &PySet_Type && !_PyArg_NoKeywords("set()", kwds)) return NULL; return make_new_set(type, NULL); |