Документация Python неофициальный перевод
Содержание страницы

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

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

PyTypeObject PyModule_Type

Этот экземпляр PyTypeObject представляет тип модуля Python. Он доступен программам на Python как types.ModuleType.

int PyModule_Check(PyObject *p)

Возвращает истину, если p является объектом модуля или подтипом объекта модуля.

int PyModule_CheckExact(PyObject *p)

Возвращает true, если p является объектом модуля, но не подтипом PyModule_Type.

PyObject* PyModule_New(const char *name)
Возвращаемое значение: новая ссылка.

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

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

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

char* PyModule_GetName(PyObject *module)

Возвращает значение __name__ для объекта module. Если модуль не предоставляет его или если это не строка, возбуждается SystemError и возвращается NULL.

char* PyModule_GetFilename(PyObject *module)

Аналогично PyModule_GetFilenameObject(), но возвращает имя файла, закодированное в 'utf-8'.

Устарело с версии 3.2: PyModule_GetFilename() вызывает UnicodeEncodeError для некодируемых имён файлов; вместо неё используйте PyModule_GetFilenameObject().

PyObject* PyModule_GetFilenameObject(PyObject *module)

Возвращает имя файла, из которого был загружен module, используя атрибут module‘s __file__. Если он не определён или не является строкой unicode, вызывает SystemError и возвращает NULL; в противном случае возвращает ссылку на PyUnicodeObject.

Новое в версии 3.2.

void* PyModule_GetState(PyObject *module)

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

PyModuleDef* PyModule_GetDef(PyObject *module)

Возвращает указатель на структуру PyModuleDef, из которой был создан модуль, или NULL, если модуль не был создан с помощью PyModule_Create().

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

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

PyObject* PyModule_Create(PyModuleDef *module)

Создаёт новый объект модуля по определению в module. Работает как PyModule_Create2(), где module_api_version установлено в PYTHON_API_VERSION.

PyObject* PyModule_Create2(PyModuleDef *module, int module_api_version)

Создаёт новый объект модуля по определению в module, принимая версию API module_api_version. Если эта версия не совпадает с версией работающего интерпретатора, выдаётся RuntimeWarning.

Примечание

В большинстве случаев следует использовать PyModule_Create(); используйте эту функцию, только если уверены, что она нужна.

PyModuleDef

Эта структура содержит всю информацию, необходимую для создания объекта модуля. Обычно для каждого модуля существует только одна статическая переменная этого типа, которая статически инициализируется и затем передаётся в PyModule_Create() в функции инициализации модуля.

PyModuleDef_Base m_base

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

char* m_name

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

char* m_doc

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

Py_ssize_t m_size

Если объекту модуля требуется дополнительная память, это значение должно быть установлено равным количеству байтов для выделения; указатель на блок памяти можно получить с помощью PyModule_GetState(). Если память не нужна, установите это значение равным -1.

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

PyMethodDef* m_methods

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

inquiry m_reload

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

traverseproc m_traverse

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

inquiry m_clear

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

freefunc m_free

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

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 должна завершаться нулевым символом. Возвращает -1 при ошибке, 0 при успехе.

int PyModule_AddIntMacro(PyObject *module, macro)

Добавляет целочисленную константу в module. Имя и значение берутся из macro. Например, PyModule_AddIntMacro(module, AF_INET) добавляет целочисленную константу AF_INET со значением AF_INET в module. Возвращает -1 при ошибке, 0 при успехе.

int PyModule_AddStringMacro(PyObject *module, macro)

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