(module object)

PyTypeObject PyModule_Type

PyTypeObject Python Python types.ModuleType

int PyModule_Check(PyObject *p)

p

int PyModule_CheckExact(PyObject *p)

p PyModule_Type.

PyObject* PyModule_NewObject(PyObject *name)

__name__ name __name__, __doc__, __package__, __loader__ (__name__ None ); __file__

3.3 .

3.4 : __package__ __loader__ None

PyObject* PyModule_New(const char *name)
Return value: New reference.

Similar to PyModule_NewObject(), but the name is a UTF-8 encoded string instead of a Unicode object.

PyObject* PyModule_GetDict(PyObject *module)
Return value: Borrowed reference.

module ; __dict__ module () SystemError NULL

__dict__ PyModule_*() PyObject_*()

PyObject* PyModule_GetNameObject(PyObject *module)

module __name__ SystemError NULL

3.3 .

char* PyModule_GetName(PyObject *module)

PyModule_GetNameObject() 'utf-8' name

void* PyModule_GetState(PyObject *module)

"state"() NULL PyModuleDef.m_size

PyModuleDef* PyModule_GetDef(PyObject *module)

PyModuleDef NULL

PyObject* PyModule_GetFilenameObject(PyObject *module)

module __file__ module Unicode SystemError NULL Unicode

3.2 .

char* PyModule_GetFilename(PyObject *module)

PyModule_GetFilenameObject() 'utf-8'

C

() (PyImport_AppendInittab() ) C C++ Python

PyModule_Create() ""

PyModuleDef

1

PyModuleDef_Base m_base

PyModuleDef_HEAD_INIT

char* m_name

char* m_doc

docstring docstring PyDoc_STRVAR()

Py_ssize_t m_size

PyModule_GetState()

m_size m_free

m_size -1

m_size m_size

PEP 3121

PyMethodDef* m_methods

PyMethodDef NULL

PyModuleDef_Slot* m_slots

{0, NULL} m_slots NULL

3.5 : 3.5 NULL :

inquiry m_reload
traverseproc m_traverse

A traversal function to call during GC traversal of the module object, or NULL if not needed. This function may be called before module state is allocated (PyModule_GetState() may return NULL), and before the Py_mod_exec function is executed.

inquiry m_clear

A clear function to call during GC clearing of the module object, or NULL if not needed. This function may be called before module state is allocated (PyModule_GetState() may return NULL), and before the Py_mod_exec function is executed.

freefunc m_free

A function to call during deallocation of the module object, or NULL if not needed. This function may be called before module state is allocated (PyModule_GetState() may return NULL), and before the Py_mod_exec function is executed.

""21:

PyObject* PyModule_Create(PyModuleDef *def)

def PyModule_Create2() module_api_version PYTHON_API_VERSION

PyObject* PyModule_Create2(PyModuleDef *def, int module_api_version)

API module_api_version def RuntimeWarning

PyModule_AddObject()

1"" Python: __new__() __init__()

: sys.modules Python : ( PyModule_GetState() ) ( __dict__ PyType_FromSpec() )

(PyInit_modulename) m_slots PyModuleDef PyModuleDef :

PyObject* PyModuleDef_Init(PyModuleDef *def)

Python

PyObject* def NULL

3.5 .

m_slots PyModuleDef_Slot :

PyModuleDef_Slot
int slot

ID

void* value

ID

3.5 .

m_slots ID 0

:

Py_mod_create

value :

PyObject* create_module(PyObject *spec, PyModuleDef *def)

PEP 451 ModuleSpec NULL

Python

Py_mod_create 1

Py_mod_create PyModule_New() spec

PyModule_Type PyModuleDef NULL m_traverse, m_clear, m_free m_size Py_mod_create PyModule_Type

Py_mod_exec

Python: :

int exec_module(PyObject* module)

Py_mod_exec m_slots

PEP 489

PyModule_FromDefAndSpec PyModule_ExecDef

PyObject * PyModule_FromDefAndSpec(PyModuleDef *def, PyObject *spec)

module ModuleSpec spec PyModule_FromDefAndSpec2() module_api_version PYTHON_API_VERSION

3.5 .

PyObject * PyModule_FromDefAndSpec2(PyModuleDef *def, PyObject *spec, int module_api_version)

API module_api_version module ModuleSpec spec RuntimeWarning

3.5 .

int PyModule_ExecDef(PyObject *module, PyModuleDef *def)

def (Py_mod_exec)

3.5 .

int PyModule_SetDocString(PyObject *module, const char *docstring)

module docstring docstring PyModuleDef PyModule_Create PyModule_FromDefAndSpec

3.5 .

int PyModule_AddFunctions(PyObject *module, PyMethodDef *functions)

NULL functions module PyMethodDef PyMethodDef ( C "" 1 Python ) PyModuleDef PyModule_Create PyModule_FromDefAndSpec

3.5 .

() () state :

int PyModule_AddObject(PyObject *module, const char *name, PyObject *value)

module name value -1 0

int PyModule_AddIntConstant(PyObject *module, const char *name, long value)

module name -1 0

int PyModule_AddStringConstant(PyObject *module, const char *name, const char *value)

module name value NULL -1 0

int PyModule_AddIntMacro(PyObject *module, macro)

module int macro PyModule_AddIntMacro(module, AF_INET) AF_INET int AF_INET module -1 0

int PyModule_AddStringMacro(PyObject *module, macro)

module

PyObject* PyState_FindModule(PyModuleDef *def)

def PyState_AddModule() state state NULL

int PyState_AddModule(PyObject *module, PyModuleDef *def)

state PyState_FindModule()

3.3 .

int PyState_RemoveModule(PyModuleDef *def)

def state

3.3 .