Where Online Learning is simpler!
The C and C++ Include Header Files
cat -n /usr/include/python3.14/internal/pycore_moduleobject.h
1 #ifndef Py_INTERNAL_MODULEOBJECT_H 2 #define Py_INTERNAL_MODULEOBJECT_H 3 #ifdef __cplusplus 4 extern "C" { 5 #endif 6 7 #ifndef Py_BUILD_CORE 8 # error "this header requires Py_BUILD_CORE define" 9 #endif 10 11 extern void _PyModule_Clear(PyObject *); 12 extern void _PyModule_ClearDict(PyObject *); 13 extern int _PyModuleSpec_IsInitializing(PyObject *); 14 extern int _PyModuleSpec_GetFileOrigin(PyObject *, PyObject **); 15 extern int _PyModule_IsPossiblyShadowing(PyObject *); 16 17 extern int _PyModule_IsExtension(PyObject *obj); 18 19 typedef struct { 20 PyObject_HEAD 21 PyObject *md_dict; 22 PyModuleDef *md_def; 23 void *md_state; 24 PyObject *md_weaklist; 25 // for logging purposes after md_dict is cleared 26 PyObject *md_name; 27 #ifdef Py_GIL_DISABLED 28 void *md_gil; 29 #endif 30 } PyModuleObject; 31 32 static inline PyModuleDef* _PyModule_GetDef(PyObject *mod) { 33 assert(PyModule_Check(mod)); 34 return ((PyModuleObject *)mod)->md_def; 35 } 36 37 static inline void* _PyModule_GetState(PyObject* mod) { 38 assert(PyModule_Check(mod)); 39 return ((PyModuleObject *)mod)->md_state; 40 } 41 42 static inline PyObject* _PyModule_GetDict(PyObject *mod) { 43 assert(PyModule_Check(mod)); 44 PyObject *dict = ((PyModuleObject *)mod) -> md_dict; 45 // _PyModule_GetDict(mod) must not be used after calling module_clear(mod) 46 assert(dict != NULL); 47 return dict; // borrowed reference 48 } 49 50 extern PyObject * _PyModule_GetFilenameObject(PyObject *); 51 extern Py_ssize_t _PyModule_GetFilenameUTF8( 52 PyObject *module, 53 char *buffer, 54 Py_ssize_t maxlen); 55 56 PyObject* _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress); 57 PyObject* _Py_module_getattro(PyObject *m, PyObject *name); 58 59 #ifdef __cplusplus 60 } 61 #endif 62 #endif /* !Py_INTERNAL_MODULEOBJECT_H */