diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py index f63564e6b0ee6d..1ef56243549874 100644 --- a/Lib/test/test_select.py +++ b/Lib/test/test_select.py @@ -87,6 +87,10 @@ def fileno(self): a[:] = [F()] * 10 self.assertEqual(select.select([], a, []), ([], a[:5], [])) + def test_disallow_instantiation(self): + tp = type(select.poll()) + self.assertRaises(TypeError, tp) + def tearDownModule(): support.reap_children() diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index f80da5895401fe..5038c325faa4eb 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -728,13 +728,6 @@ newPollObject(PyObject *module) return self; } -static PyObject * -poll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) -{ - PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type)); - return NULL; -} - static void poll_dealloc(pollObject *self) { @@ -2275,16 +2268,14 @@ static PyMethodDef poll_methods[] = { static PyType_Slot poll_Type_slots[] = { {Py_tp_dealloc, poll_dealloc}, {Py_tp_methods, poll_methods}, - {Py_tp_new, poll_new}, {0, 0}, }; static PyType_Spec poll_Type_spec = { - "select.poll", - sizeof(pollObject), - 0, - Py_TPFLAGS_DEFAULT, - poll_Type_slots + .name = "select.poll", + .basicsize = sizeof(pollObject), + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .slots = poll_Type_slots, }; #ifdef HAVE_SYS_DEVPOLL_H