mirror of https://github.com/python/cpython
bpo-43413: Revert changes in set.__init__ (GH-28403)
Co-authored-by: Jason R. Coombs <jaraco@jaraco.com>
This commit is contained in:
parent
1944434b44
commit
ad4857884b
|
@ -667,10 +667,13 @@ class TestSetSubclass(TestSet):
|
||||||
self = super().__new__(cls, arg)
|
self = super().__new__(cls, arg)
|
||||||
self.newarg = newarg
|
self.newarg = newarg
|
||||||
return self
|
return self
|
||||||
u = subclass_with_new([1, 2], newarg=3)
|
u = subclass_with_new([1, 2])
|
||||||
self.assertIs(type(u), subclass_with_new)
|
self.assertIs(type(u), subclass_with_new)
|
||||||
self.assertEqual(set(u), {1, 2})
|
self.assertEqual(set(u), {1, 2})
|
||||||
self.assertEqual(u.newarg, 3)
|
self.assertIsNone(u.newarg)
|
||||||
|
# disallow kwargs in __new__ only (https://bugs.python.org/issue43413#msg402000)
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
subclass_with_new([1, 2], newarg=3)
|
||||||
|
|
||||||
|
|
||||||
class TestFrozenSet(TestJointOps, unittest.TestCase):
|
class TestFrozenSet(TestJointOps, unittest.TestCase):
|
||||||
|
|
|
@ -1140,7 +1140,7 @@ blocks. Patch by Pablo Galindo.
|
||||||
|
|
||||||
Constructors of subclasses of some builtin classes (e.g. :class:`tuple`,
|
Constructors of subclasses of some builtin classes (e.g. :class:`tuple`,
|
||||||
:class:`list`, :class:`frozenset`) no longer accept arbitrary keyword
|
:class:`list`, :class:`frozenset`) no longer accept arbitrary keyword
|
||||||
arguments. Subclass of :class:`set` can now define a ``__new__()`` method
|
arguments. [reverted in 3.11a4] Subclass of :class:`set` can now define a ``__new__()`` method
|
||||||
with additional keyword parameters without overriding also ``__init__()``.
|
with additional keyword parameters without overriding also ``__init__()``.
|
||||||
|
|
||||||
..
|
..
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Revert changes in ``set.__init__``. Subclass of :class:`set` needs to define a ``__init__()`` method if it defines a ``__new__()`` method with additional keyword parameters.
|
|
@ -1946,9 +1946,7 @@ set_init(PySetObject *self, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
PyObject *iterable = NULL;
|
PyObject *iterable = NULL;
|
||||||
|
|
||||||
if ((Py_IS_TYPE(self, &PySet_Type) ||
|
if (!_PyArg_NoKeywords("set", kwds))
|
||||||
Py_TYPE(self)->tp_new == PySet_Type.tp_new) &&
|
|
||||||
!_PyArg_NoKeywords("set", kwds))
|
|
||||||
return -1;
|
return -1;
|
||||||
if (!PyArg_UnpackTuple(args, Py_TYPE(self)->tp_name, 0, 1, &iterable))
|
if (!PyArg_UnpackTuple(args, Py_TYPE(self)->tp_name, 0, 1, &iterable))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue