module.md
1> **Источник:** https://python-all.ru/3.1/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.1/c-api/type.html#PyTypeObject) `PyModule_Type`**1213Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) представляет тип модуля Python. Он доступен программам на Python как `types.ModuleType`.1415**int `PyModule_Check`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**1617Возвращает истину, если1819*p*2021является объектом модуля или подтипом объекта модуля.2223**int `PyModule_CheckExact`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**2425Возвращает true, если2627*p*2829является объектом модуля, но не подтипом3031[`PyModule_Type`](https://python-all.ru/3.1/c-api/module.html#PyModule_Type)3233.3435**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyModule_New`(const char *\*name*)**3637*Возвращаемое значение: новая ссылка.*3839Возвращает новый объект модуля с атрибутом `__name__`, установленным в *name*. Заполнены только атрибуты модуля `__doc__` и `__name__`; вызывающий отвечает за предоставление атрибута `__file__`.4041**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyModule_GetDict`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*)**4243*Возвращаемое значение: заимствованная ссылка.*4445Возвращает объект словаря, который реализует пространство имён *module*; этот объект совпадает с атрибутом `__dict__` объекта модуля. Эта функция никогда не завершается ошибкой. Расширениям рекомендуется использовать другие `PyModule_*()` и `PyObject_*()` функции, а не напрямую манипулировать `__dict__` модуля.4647**char\* `PyModule_GetName`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*)**4849Возвращает значение `__name__` для объекта *module*. Если модуль не предоставляет его или если это не строка, возбуждается [`SystemError`](https://python-all.ru/3.1/library/exceptions.html#SystemError) и возвращается *NULL*.5051**char\* `PyModule_GetFilename`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*)**5253Возвращает имя файла, из которого был загружен *модуль*, используя *модуль*‘s `__file__` атрибут. Если этот атрибут не определён или не является строкой, возбуждает [`SystemError`](https://python-all.ru/3.1/library/exceptions.html#SystemError) и возвращает *NULL*.5455**void\* `PyModule_GetState`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*)**5657Возвращает «состояние» модуля, то есть указатель на блок памяти, выделенный при создании модуля, или5859*NULL*6061. См.6263`PyModuleDef.m_size`6465.6667**[PyModuleDef](https://python-all.ru/3.1/c-api/module.html#PyModuleDef)\* `PyModule_GetDef`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*)**6869Возвращает указатель на структуру7071[`PyModuleDef`](https://python-all.ru/3.1/c-api/module.html#PyModuleDef)7273, из которой был создан модуль, или7475*NULL*7677, если модуль не был создан с помощью7879[`PyModule_Create()`](https://python-all.ru/3.1/c-api/module.html#PyModule_Create)8081.8283## Инициализация C-модулей8485Эти функции обычно используются в функции инициализации модуля.8687**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyModule_Create`([PyModuleDef](https://python-all.ru/3.1/c-api/module.html#PyModuleDef) *\*module*)**8889Создаёт новый объект модуля по определению в9091*module*9293. Работает как9495[`PyModule_Create2()`](https://python-all.ru/3.1/c-api/module.html#PyModule_Create2)9697, где9899*module\_api\_version*100101установлено в102103`PYTHON_API_VERSION`104105.106107**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyModule_Create2`([PyModuleDef](https://python-all.ru/3.1/c-api/module.html#PyModuleDef) *\*module*, int *module\_api\_version*)**108109Создаёт новый объект модуля по определению в *module*, принимая версию API *module\_api\_version*. Если эта версия не совпадает с версией работающего интерпретатора, выдаётся [`RuntimeWarning`](https://python-all.ru/3.1/library/exceptions.html#RuntimeWarning).110111> **Примечание**112>113> В большинстве случаев следует использовать [`PyModule_Create()`](https://python-all.ru/3.1/c-api/module.html#PyModule_Create); используйте эту функцию, только если уверены, что она нужна.114115**`PyModuleDef`**116117Эта структура содержит всю информацию, необходимую для создания объекта модуля. Обычно для каждого модуля существует только одна статическая переменная этого типа, которая статически инициализируется и затем передаётся в [`PyModule_Create()`](https://python-all.ru/3.1/c-api/module.html#PyModule_Create) в функции инициализации модуля.118119**PyModuleDef\_Base `m_base`**120121Этот член следует всегда инициализировать значением122123`PyModuleDef_HEAD_INIT`124125.126127**char\* `m_name`**128129Имя нового модуля.130131**char\* `m_doc`**132133Докстринг модуля; обычно используется переменная докстринга, созданная с помощью134135`PyDoc_STRVAR()`136137.138139**Py\_ssize\_t `m_size`**140141Если объекту модуля требуется дополнительная память, это значение должно быть установлено равным количеству байтов для выделения; указатель на блок памяти можно получить с помощью [`PyModule_GetState()`](https://python-all.ru/3.1/c-api/module.html#PyModule_GetState). Если память не нужна, установите это значение равным `-1`.142143Эту память следует использовать для хранения состояния каждого модуля вместо статических глобальных переменных, поскольку тогда она будет безопасна для использования в нескольких под-интерпретаторах. Она освобождается при деаллокации объекта модуля после вызова функции [`m_free`](https://python-all.ru/3.1/c-api/module.html#m_free), если она присутствует.144145**[PyMethodDef](https://python-all.ru/3.1/c-api/structures.html#PyMethodDef)\* `m_methods`**146147Указатель на таблицу функций уровня модуля, описываемую значениями148149[`PyMethodDef`](https://python-all.ru/3.1/c-api/structures.html#PyMethodDef)150151. Может быть152153*NULL*154155, если функции отсутствуют.156157**[inquiry](https://python-all.ru/3.1/c-api/gcsupport.html#inquiry) `m_reload`**158159В настоящее время не используется, должно быть160161*NULL*162163.164165**[traverseproc](https://python-all.ru/3.1/c-api/gcsupport.html#traverseproc) `m_traverse`**166167Функция обхода, вызываемая во время GC-обхода объекта модуля, или168169*NULL*170171, если не требуется.172173**[inquiry](https://python-all.ru/3.1/c-api/gcsupport.html#inquiry) `m_clear`**174175Функция очистки, вызываемая во время GC-очистки объекта модуля, или176177*NULL*178179, если не требуется.180181**freefunc `m_free`**182183Функция, вызываемая при освобождении объекта модуля, или184185*NULL*186187, если не требуется.188189**int `PyModule_AddObject`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*, const char *\*name*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*value*)**190191Добавляет объект в192193*module*194195под именем196197*name*198199. Это удобная функция, которую можно использовать в функции инициализации модуля. Она похищает ссылку на200201*value*202203. Возвращает204205`-1`206207при ошибке,208209`0`210211при успехе.212213**int `PyModule_AddIntConstant`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*, const char *\*name*, long *value*)**214215Добавляет целочисленную константу в модуль216217*module*218219под именем220221*name*222223. Эту удобную функцию можно использовать из функции инициализации модуля. Возвращает224225`-1`226227в случае ошибки,228229`0`230231при успешном выполнении.232233**int `PyModule_AddStringConstant`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*, const char *\*name*, const char *\*value*)**234235Добавляет строковую константу в236237*module*238239под именем240241*name*242243. Эту вспомогательную функцию можно использовать в функции инициализации модуля. Строка244245*value*246247должна завершаться нулевым символом. Возвращает248249`-1`250251при ошибке,252253`0`254255при успехе.256257**int `PyModule_AddIntMacro`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*, macro)**258259Добавляет целочисленную константу в260261*module*262263. Имя и значение берутся из264265*macro*266267. Например,268269`PyModule_AddIntMacro(module, AF_INET)`270271добавляет целочисленную константу272273*AF\_INET*274275со значением276277*AF\_INET*278279в280281*module*282283. Возвращает284285`-1`286287при ошибке,288289`0`290291при успехе.292293**int `PyModule_AddStringMacro`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*, macro)**294295Добавляет строковую константу в296297*module*298299.300