Skip to content

Commit 535989e

Browse files
committed
SF #1486663 -- Allow keyword args in subclasses of set() and frozenset().
1 parent 9e031c7 commit 535989e

2 files changed

Lines changed: 13 additions & 2 deletions

File tree

Lib/test/test_set.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,16 @@ class SetSubclass(set):
468468
class TestSetSubclass(TestSet):
469469
thetype = SetSubclass
470470

471+
class SetSubclassWithKeywordArgs(set):
472+
def __init__(self, iterable=[], newarg=None):
473+
set.__init__(self, iterable)
474+
475+
class TestSetSubclassWithKeywordArgs(TestSet):
476+
477+
def test_keywords_in_subclass(self):
478+
'SF bug #1486663 -- this used to erroneously raise a TypeError'
479+
SetSubclassWithKeywordArgs(newarg=1)
480+
471481
class TestFrozenSet(TestJointOps):
472482
thetype = frozenset
473483

@@ -1450,6 +1460,7 @@ def test_main(verbose=None):
14501460
test_classes = (
14511461
TestSet,
14521462
TestSetSubclass,
1463+
TestSetSubclassWithKeywordArgs,
14531464
TestFrozenSet,
14541465
TestFrozenSetSubclass,
14551466
TestSetOfSets,

Objects/setobject.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,7 @@ frozenset_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
10041004
{
10051005
PyObject *iterable = NULL, *result;
10061006

1007-
if (!_PyArg_NoKeywords("frozenset()", kwds))
1007+
if (type == &PyFrozenSet_Type && !_PyArg_NoKeywords("frozenset()", kwds))
10081008
return NULL;
10091009

10101010
if (!PyArg_UnpackTuple(args, type->tp_name, 0, 1, &iterable))
@@ -1048,7 +1048,7 @@ PySet_Fini(void)
10481048
static PyObject *
10491049
set_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
10501050
{
1051-
if (!_PyArg_NoKeywords("set()", kwds))
1051+
if (type == &PySet_Type && !_PyArg_NoKeywords("set()", kwds))
10521052
return NULL;
10531053

10541054
return make_new_set(type, NULL);

0 commit comments

Comments
 (0)