self = super().__new__(cls, arg)
self.newarg = newarg
return self
- u = subclass_with_new([1, 2], newarg=3)
+ u = subclass_with_new([1, 2])
self.assertIs(type(u), subclass_with_new)
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):
Constructors of subclasses of some builtin classes (e.g. :class:`tuple`,
: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__()``.
..
{
PyObject *iterable = NULL;
- if ((Py_IS_TYPE(self, &PySet_Type) ||
- Py_TYPE(self)->tp_new == PySet_Type.tp_new) &&
- !_PyArg_NoKeywords("set", kwds))
+ if (!_PyArg_NoKeywords("set", kwds))
return -1;
if (!PyArg_UnpackTuple(args, Py_TYPE(self)->tp_name, 0, 1, &iterable))
return -1;