module.md
1> **Источник:** https://python-all.ru/3.2/c-api/module.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты модулей89Есть лишь несколько функций, специфичных для объектов модуля.1011**[PyTypeObject](https://python-all.ru/3.2/c-api/type.html#PyTypeObject) `PyModule_Type`**1213Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.2/c-api/type.html#PyTypeObject) представляет тип модуля Python. Он доступен программам на Python как `types.ModuleType`.1415#### `int PyModule_Check(PyObject *p)`1617Возвращает истину, если *p* является объектом модуля или подтипом объекта модуля.1819#### `int PyModule_CheckExact(PyObject *p)`2021Возвращает true, если *p* является объектом модуля, но не подтипом [`PyModule_Type`](https://python-all.ru/3.2/c-api/module.html#PyModule_Type).2223#### `PyObject* PyModule_New(const char *name)`2425*Возвращаемое значение: новая ссылка.*2627Возвращает новый объект модуля с атрибутом `__name__`, установленным в *name*. Заполнены только атрибуты модуля `__doc__` и `__name__`; вызывающий отвечает за предоставление атрибута `__file__`.2829#### `PyObject* PyModule_GetDict(PyObject *module)`3031*Возвращаемое значение: заимствованная ссылка.*3233Возвращает объект словаря, который реализует пространство имён *module*; этот объект совпадает с атрибутом `__dict__` объекта модуля. Эта функция никогда не завершается ошибкой. Расширениям рекомендуется использовать другие `PyModule_*()` и `PyObject_*()` функции, а не напрямую манипулировать `__dict__` модуля.3435#### `char* PyModule_GetName(PyObject *module)`3637Возвращает значение `__name__` для объекта *module*. Если модуль не предоставляет его или если это не строка, возбуждается [`SystemError`](https://python-all.ru/3.2/library/exceptions.html#SystemError) и возвращается *NULL*.3839#### `char* PyModule_GetFilename(PyObject *module)`4041Аналогично [`PyModule_GetFilenameObject()`](https://python-all.ru/3.2/c-api/module.html#PyModule_GetFilenameObject), но возвращает имя файла, закодированное в 'utf-8'.4243Устарело с версии 3.2: [`PyModule_GetFilename()`](https://python-all.ru/3.2/c-api/module.html#PyModule_GetFilename) вызывает `UnicodeEncodeError` для некодируемых имён файлов; вместо неё используйте [`PyModule_GetFilenameObject()`](https://python-all.ru/3.2/c-api/module.html#PyModule_GetFilenameObject).4445#### `PyObject* PyModule_GetFilenameObject(PyObject *module)`4647Возвращает имя файла, из которого был загружен *module*, используя атрибут *module*‘s `__file__`. Если он не определён или не является строкой unicode, вызывает [`SystemError`](https://python-all.ru/3.2/library/exceptions.html#SystemError) и возвращает *NULL*; в противном случае возвращает ссылку на [`PyUnicodeObject`](https://python-all.ru/3.2/c-api/unicode.html#PyUnicodeObject).4849Новое в версии 3.2.5051#### `void* PyModule_GetState(PyObject *module)`5253Возвращает «состояние» модуля, то есть указатель на блок памяти, выделенный при создании модуля, или *NULL*. См. [`PyModuleDef.m_size`](https://python-all.ru/3.2/c-api/module.html#PyModuleDef.m_size).5455#### `PyModuleDef* PyModule_GetDef(PyObject *module)`5657Возвращает указатель на структуру [`PyModuleDef`](https://python-all.ru/3.2/c-api/module.html#PyModuleDef), из которой был создан модуль, или *NULL*, если модуль не был создан с помощью [`PyModule_Create()`](https://python-all.ru/3.2/c-api/module.html#PyModule_Create).5859## Инициализация C-модулей6061Эти функции обычно используются в функции инициализации модуля.6263#### `PyObject* PyModule_Create(PyModuleDef *module)`6465Создаёт новый объект модуля по определению в *module*. Работает как [`PyModule_Create2()`](https://python-all.ru/3.2/c-api/module.html#PyModule_Create2), где *module\_api\_version* установлено в `PYTHON_API_VERSION`.6667#### `PyObject* PyModule_Create2(PyModuleDef *module, int module_api_version)`6869Создаёт новый объект модуля по определению в *module*, принимая версию API *module\_api\_version*. Если эта версия не совпадает с версией работающего интерпретатора, выдаётся [`RuntimeWarning`](https://python-all.ru/3.2/library/exceptions.html#RuntimeWarning).7071> **Примечание**72>73> В большинстве случаев следует использовать [`PyModule_Create()`](https://python-all.ru/3.2/c-api/module.html#PyModule_Create); используйте эту функцию, только если уверены, что она нужна.7475**`PyModuleDef`**7677Эта структура содержит всю информацию, необходимую для создания объекта модуля. Обычно для каждого модуля существует только одна статическая переменная этого типа, которая статически инициализируется и затем передаётся в [`PyModule_Create()`](https://python-all.ru/3.2/c-api/module.html#PyModule_Create) в функции инициализации модуля.7879**PyModuleDef\_Base `m_base`**8081Этот член следует всегда инициализировать значением `PyModuleDef_HEAD_INIT`.8283**char\* `m_name`**8485Имя нового модуля.8687**char\* `m_doc`**8889Докстринг модуля; обычно используется переменная докстринга, созданная с помощью `PyDoc_STRVAR()`.9091**Py\_ssize\_t `m_size`**9293Если объекту модуля требуется дополнительная память, это значение должно быть установлено равным количеству байтов для выделения; указатель на блок памяти можно получить с помощью [`PyModule_GetState()`](https://python-all.ru/3.2/c-api/module.html#PyModule_GetState). Если память не нужна, установите это значение равным `-1`.9495Эту память следует использовать для хранения состояния модуля вместо статических глобальных переменных, так как в таком случае она безопасна для использования в нескольких под-интерпретаторах. Она освобождается при удалении объекта модуля после вызова функции `m_free`, если она присутствует.9697**[PyMethodDef](https://python-all.ru/3.2/c-api/structures.html#PyMethodDef)\* `m_methods`**9899Указатель на таблицу функций уровня модуля, описываемую значениями [`PyMethodDef`](https://python-all.ru/3.2/c-api/structures.html#PyMethodDef). Может быть *NULL*, если функции отсутствуют.100101**[inquiry](https://python-all.ru/3.2/c-api/gcsupport.html#inquiry) `m_reload`**102103В настоящее время не используется, должно быть *NULL*.104105**[traverseproc](https://python-all.ru/3.2/c-api/gcsupport.html#traverseproc) `m_traverse`**106107Функция обхода, вызываемая во время GC-обхода объекта модуля, или *NULL*, если не требуется.108109**[inquiry](https://python-all.ru/3.2/c-api/gcsupport.html#inquiry) `m_clear`**110111Функция очистки, вызываемая во время GC-очистки объекта модуля, или *NULL*, если не требуется.112113**freefunc `m_free`**114115Функция, вызываемая при освобождении объекта модуля, или *NULL*, если не требуется.116117#### `int PyModule_AddObject(PyObject *module, const char *name, PyObject *value)`118119Добавляет объект в *module* под именем *name*. Это удобная функция, которую можно использовать в функции инициализации модуля. Она похищает ссылку на *value*. Возвращает `-1` при ошибке, `0` при успехе.120121#### `int PyModule_AddIntConstant(PyObject *module, const char *name, long value)`122123Добавляет целочисленную константу в модуль *module* под именем *name*. Эту удобную функцию можно использовать из функции инициализации модуля. Возвращает `-1` в случае ошибки, `0` при успешном выполнении.124125#### `int PyModule_AddStringConstant(PyObject *module, const char *name, const char *value)`126127Добавляет строковую константу в *module* под именем *name*. Эту вспомогательную функцию можно использовать в функции инициализации модуля. Строка *value* должна завершаться нулевым символом. Возвращает `-1` при ошибке, `0` при успехе.128129#### `int PyModule_AddIntMacro(PyObject *module, macro)`130131Добавляет целочисленную константу в *module*. Имя и значение берутся из *macro*. Например, `PyModule_AddIntMacro(module, AF_INET)` добавляет целочисленную константу *AF\_INET* со значением *AF\_INET* в *module*. Возвращает `-1` при ошибке, `0` при успехе.132133#### `int PyModule_AddStringMacro(PyObject *module, macro)`134135Добавляет строковую константу в *module*.136