Содержание страницы
Объекты типов¶Type Objects
-
PyTypeObject¶ C-структура объектов, используемая для описания встроенных типов.
-
PyObject*
PyType_Type¶ Это объект типа для объектов-типов; он совпадает с объектом
typeна уровне Python.
-
int
PyType_Check(PyObject *o)¶ Возвращает истину, если объект o является объектом типа, включая экземпляры типов, производных от стандартного объекта типа. В остальных случаях возвращает ложь.
-
int
PyType_CheckExact(PyObject *o)¶ Возвращает истину, если объект o является объектом типа, но не подтипом стандартного объекта типа. В остальных случаях возвращает ложь.
-
unsigned int
PyType_ClearCache()¶ Очищает внутренний кеш поиска. Возвращает текущий тег версии.
-
unsigned long
PyType_GetFlags(PyTypeObject* type)¶ Возвращает элемент
tp_flagstype. Эта функция в первую очередь предназначена для использования с Py_LIMITED_API; отдельные биты флагов гарантированно стабильны во всех выпусках Python, но доступ кtp_flagsсамому по себе не является частью ограниченного API.Новое в версии 3.2.
Изменено в версии 3.4: Тип возвращаемого значения теперь
unsigned long, а неlong.
-
void
PyType_Modified(PyTypeObject *type)¶ Аннулирует внутренний кеш поиска для типа и всех его подтипов. Эта функция должна вызываться после любого ручного изменения атрибутов или базовых классов типа.
-
int
PyType_HasFeature(PyTypeObject *o, int feature)¶ Возвращает истину, если объект типа o устанавливает признак feature. Признаки типа задаются одноразрядными флагами.
-
int
PyType_IS_GC(PyTypeObject *o)¶ Возвращает истину, если объект типа поддерживает детектор циклов; это проверяет флаг типа
Py_TPFLAGS_HAVE_GC.
-
int
PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)¶ Возвращает истину, если a является подтипом b.
Эта функция проверяет только непосредственные подтипы, то есть
__subclasscheck__()не вызывается для b. ВызовитеPyObject_IsSubclass(), чтобы выполнить ту же проверку, что иissubclass().
-
PyObject*
PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)¶ - Возвращаемое значение: новая ссылка.
Универсальный обработчик для слота
tp_allocобъекта-типа. Использует стандартный механизм выделения памяти Python для создания нового экземпляра и инициализации всего его содержимого значениемNULL.
-
PyObject*
PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)¶ - Возвращаемое значение: новая ссылка.
Универсальный обработчик для слота
tp_newобъекта-типа. Создаёт новый экземпляр, используя слотtp_allocтипа.
-
int
PyType_Ready(PyTypeObject *type)¶ Завершает инициализацию объекта типа. Должна вызываться для всех объектов типа, чтобы завершить их инициализацию. Эта функция отвечает за добавление наследуемых слотов из базового класса. Возвращает
0при успехе, или-1и устанавливает исключение при ошибке.
-
void*
PyType_GetSlot(PyTypeObject *type, int slot)¶ Возвращает указатель на функцию, хранящийся в указанном слоте. Если результат равен
NULL, это означает, что либо слотNULL, либо функция была вызвана с недопустимыми параметрами. Обычно вызывающий код приводит указатель результата к соответствующему типу функции.См.
PyType_Slot.slotдля возможных значений аргумента slot.Исключение возбуждается, если type не является типом кучи.
Новое в версии 3.4.
Создание типов, размещаемых в куче¶Creating Heap-Allocated Types
Следующие функции и структуры используются для создания динамических типов.
-
PyObject*
PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)¶ - Возвращаемое значение: новая ссылка.
Создаёт и возвращает объект типа кучи из spec (
Py_TPFLAGS_HEAPTYPE).Если bases является кортежем, созданный тип кучи содержит все типы, содержащиеся в нём, как базовые типы.
Если bases равно
NULL, вместо него используется слот Py_tp_bases. Если и он равенNULL, используется слот Py_tp_base. Если и он равенNULL, новый тип наследуется отobject.Эта функция вызывает
PyType_Ready()у нового типа.Новое в версии 3.3.
-
PyObject*
PyType_FromSpec(PyType_Spec *spec)¶ - Возвращаемое значение: новая ссылка.
Эквивалентно
PyType_FromSpecWithBases(spec, NULL).
-
PyType_Spec¶ Структура, определяющая поведение типа.
-
const char*
PyType_Spec.name¶ Имя типа, используемое для установки
PyTypeObject.tp_name.
-
int
PyType_Spec.basicsize¶
-
int
PyType_Spec.itemsize¶ Размер экземпляра в байтах; используется для установки
PyTypeObject.tp_basicsizeиPyTypeObject.tp_itemsize.
-
int
PyType_Spec.flags¶ Флаги типа, используются для установки
PyTypeObject.tp_flags.Если флаг
Py_TPFLAGS_HEAPTYPEне установлен,PyType_FromSpecWithBases()устанавливает его автоматически.
-
PyType_Slot *
PyType_Spec.slots¶ Массив структур
PyType_Slot. Завершается специальным значением слота{0, NULL}.
-
const char*
-
PyType_Slot¶ Структура, определяющая дополнительную функциональность типа, содержащая идентификатор слота и указатель на значение.
-
int
PyType_Slot.slot¶ Идентификатор слота.
Идентификаторы слотов именуются подобно именам полей структур
PyTypeObject,PyNumberMethods,PySequenceMethods,PyMappingMethodsиPyAsyncMethodsс добавлением префиксаPy_. Например, используйте:Py_tp_deallocдля установкиPyTypeObject.tp_deallocPy_nb_addдля установкиPyNumberMethods.nb_addPy_sq_lengthдля установкиPySequenceMethods.sq_length
Следующие поля нельзя задать с помощью
PyType_SpecиPyType_Slot:tp_print
Установка
Py_tp_basesилиPy_tp_baseможет быть проблематичной на некоторых платформах. Чтобы избежать проблем, используйте аргумент bases функцииPyType_FromSpecWithBases()вместо этого.
-
void *
PyType_Slot.pfunc¶ Желаемое значение слота. В большинстве случаев это указатель на функцию.
Не может быть
NULL.
-
int