Содержание страницы
Объекты модулей¶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, если функции отсутствуют.
- 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 при успехе.