> **Источник:** https://python-all.ru/3.1/c-api/module.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Объекты модулей

Есть лишь несколько функций, специфичных для объектов модуля.

**[PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) `PyModule_Type`**

Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) представляет тип модуля Python. Он доступен программам на Python как `types.ModuleType`.

**int `PyModule_Check`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**

Возвращает истину, если

*p*

является объектом модуля или подтипом объекта модуля.

**int `PyModule_CheckExact`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**

Возвращает true, если

*p*

является объектом модуля, но не подтипом

[`PyModule_Type`](https://python-all.ru/3.1/c-api/module.html#PyModule_Type)

.

**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyModule_New`(const char *\*name*)**

*Возвращаемое значение: новая ссылка.*

Возвращает новый объект модуля с атрибутом `__name__`, установленным в *name*. Заполнены только атрибуты модуля `__doc__` и `__name__`; вызывающий отвечает за предоставление атрибута `__file__`.

**[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*)**

*Возвращаемое значение: заимствованная ссылка.*

Возвращает объект словаря, который реализует пространство имён *module*; этот объект совпадает с атрибутом `__dict__` объекта модуля. Эта функция никогда не завершается ошибкой. Расширениям рекомендуется использовать другие `PyModule_*()` и `PyObject_*()` функции, а не напрямую манипулировать `__dict__` модуля.

**char\* `PyModule_GetName`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*)**

Возвращает значение `__name__` для объекта *module*. Если модуль не предоставляет его или если это не строка, возбуждается [`SystemError`](https://python-all.ru/3.1/library/exceptions.html#SystemError) и возвращается *NULL*.

**char\* `PyModule_GetFilename`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*)**

Возвращает имя файла, из которого был загружен *модуль*, используя *модуль*‘s `__file__` атрибут. Если этот атрибут не определён или не является строкой, возбуждает [`SystemError`](https://python-all.ru/3.1/library/exceptions.html#SystemError) и возвращает *NULL*.

**void\* `PyModule_GetState`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*)**

Возвращает «состояние» модуля, то есть указатель на блок памяти, выделенный при создании модуля, или

*NULL*

. См.

`PyModuleDef.m_size`

.

**[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*)**

Возвращает указатель на структуру

[`PyModuleDef`](https://python-all.ru/3.1/c-api/module.html#PyModuleDef)

, из которой был создан модуль, или

*NULL*

, если модуль не был создан с помощью

[`PyModule_Create()`](https://python-all.ru/3.1/c-api/module.html#PyModule_Create)

.

## Инициализация C-модулей

Эти функции обычно используются в функции инициализации модуля.

**[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*)**

Создаёт новый объект модуля по определению в

*module*

. Работает как

[`PyModule_Create2()`](https://python-all.ru/3.1/c-api/module.html#PyModule_Create2)

, где

*module\_api\_version*

установлено в

`PYTHON_API_VERSION`

.

**[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*)**

Создаёт новый объект модуля по определению в *module*, принимая версию API *module\_api\_version*. Если эта версия не совпадает с версией работающего интерпретатора, выдаётся [`RuntimeWarning`](https://python-all.ru/3.1/library/exceptions.html#RuntimeWarning).

> **Примечание**
>
> В большинстве случаев следует использовать [`PyModule_Create()`](https://python-all.ru/3.1/c-api/module.html#PyModule_Create); используйте эту функцию, только если уверены, что она нужна.

**`PyModuleDef`**

Эта структура содержит всю информацию, необходимую для создания объекта модуля. Обычно для каждого модуля существует только одна статическая переменная этого типа, которая статически инициализируется и затем передаётся в [`PyModule_Create()`](https://python-all.ru/3.1/c-api/module.html#PyModule_Create) в функции инициализации модуля.

**PyModuleDef\_Base `m_base`**

Этот член следует всегда инициализировать значением

`PyModuleDef_HEAD_INIT`

.

**char\* `m_name`**

Имя нового модуля.

**char\* `m_doc`**

Докстринг модуля; обычно используется переменная докстринга, созданная с помощью

`PyDoc_STRVAR()`

.

**Py\_ssize\_t `m_size`**

Если объекту модуля требуется дополнительная память, это значение должно быть установлено равным количеству байтов для выделения; указатель на блок памяти можно получить с помощью [`PyModule_GetState()`](https://python-all.ru/3.1/c-api/module.html#PyModule_GetState). Если память не нужна, установите это значение равным `-1`.

Эту память следует использовать для хранения состояния каждого модуля вместо статических глобальных переменных, поскольку тогда она будет безопасна для использования в нескольких под-интерпретаторах. Она освобождается при деаллокации объекта модуля после вызова функции [`m_free`](https://python-all.ru/3.1/c-api/module.html#m_free), если она присутствует.

**[PyMethodDef](https://python-all.ru/3.1/c-api/structures.html#PyMethodDef)\* `m_methods`**

Указатель на таблицу функций уровня модуля, описываемую значениями

[`PyMethodDef`](https://python-all.ru/3.1/c-api/structures.html#PyMethodDef)

. Может быть

*NULL*

, если функции отсутствуют.

**[inquiry](https://python-all.ru/3.1/c-api/gcsupport.html#inquiry) `m_reload`**

В настоящее время не используется, должно быть

*NULL*

.

**[traverseproc](https://python-all.ru/3.1/c-api/gcsupport.html#traverseproc) `m_traverse`**

Функция обхода, вызываемая во время GC-обхода объекта модуля, или

*NULL*

, если не требуется.

**[inquiry](https://python-all.ru/3.1/c-api/gcsupport.html#inquiry) `m_clear`**

Функция очистки, вызываемая во время GC-очистки объекта модуля, или

*NULL*

, если не требуется.

**freefunc `m_free`**

Функция, вызываемая при освобождении объекта модуля, или

*NULL*

, если не требуется.

**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*)**

Добавляет объект в

*module*

под именем

*name*

. Это удобная функция, которую можно использовать в функции инициализации модуля. Она похищает ссылку на

*value*

. Возвращает

`-1`

при ошибке,

`0`

при успехе.

**int `PyModule_AddIntConstant`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*, const char *\*name*, long *value*)**

Добавляет целочисленную константу в модуль

*module*

под именем

*name*

. Эту удобную функцию можно использовать из функции инициализации модуля. Возвращает

`-1`

в случае ошибки,

`0`

при успешном выполнении.

**int `PyModule_AddStringConstant`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*, const char *\*name*, const char *\*value*)**

Добавляет строковую константу в

*module*

под именем

*name*

. Эту вспомогательную функцию можно использовать в функции инициализации модуля. Строка

*value*

должна завершаться нулевым символом. Возвращает

`-1`

при ошибке,

`0`

при успехе.

**int `PyModule_AddIntMacro`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*, macro)**

Добавляет целочисленную константу в

*module*

. Имя и значение берутся из

*macro*

. Например,

`PyModule_AddIntMacro(module, AF_INET)`

добавляет целочисленную константу

*AF\_INET*

со значением

*AF\_INET*

в

*module*

. Возвращает

`-1`

при ошибке,

`0`

при успехе.

**int `PyModule_AddStringMacro`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*module*, macro)**

Добавляет строковую константу в

*module*

.
