# frozen and namespace module reprs are tested in importlib.
+ def test_subclass_with_slots(self):
+ # In 3.11alpha this crashed, as the slots weren't NULLed.
+
+ class ModuleWithSlots(ModuleType):
+ __slots__ = ("a", "b")
+
+ def __init__(self, name):
+ super().__init__(name)
+
+ m = ModuleWithSlots("name")
+ with self.assertRaises(AttributeError):
+ m.a
+ with self.assertRaises(AttributeError):
+ m.b
+ m.a, m.b = 1, 2
+ self.assertEqual(m.a, 1)
+ self.assertEqual(m.b, 2)
+
+
if __name__ == '__main__':
unittest.main()
#include "Python.h"
#include "pycore_call.h" // _PyObject_CallNoArgs()
#include "pycore_interp.h" // PyInterpreterState.importlib
+#include "pycore_object.h" // _PyType_AllocNoTrack
#include "pycore_pystate.h" // _PyInterpreterState_GET()
#include "pycore_moduleobject.h" // _PyModule_GetDef()
#include "structmember.h" // PyMemberDef
new_module_notrack(PyTypeObject *mt)
{
PyModuleObject *m;
- m = PyObject_GC_New(PyModuleObject, mt);
+ m = (PyModuleObject *)_PyType_AllocNoTrack(mt, 0);
if (m == NULL)
return NULL;
m->md_def = NULL;