From 535989ecb68da1affc531e866d190bfdbd9fc5fc Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 11 Jan 2007 18:21:04 +0000 Subject: [PATCH] SF #1486663 -- Allow keyword args in subclasses of set() and frozenset(). --- Lib/test/test_set.py | 11 +++++++++++ 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 dedd1fb5e5..49bdec3445 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 507a07bdcc..f038ee3fde 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); -- 2.40.0