summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2007-01-11 18:22:55 (GMT)
committerRaymond Hettinger <python@rcn.com>2007-01-11 18:22:55 (GMT)
commit9fdfadb06ee3c6d182af084afaa97bc6bf4652bc (patch)
tree98dbbae4cf1e3e87bd32c96c7914af1983912f06
parenta398e2d0592464b6594bac0e4ee3ef091cce5159 (diff)
downloadcpython-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.py11
-rw-r--r--Objects/setobject.c4
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);