Объекты типа¶
-
PyTypeObject
¶ Структура C объектов, используемая для описания встроенных типов.
-
int
PyType_Check
(PyObject *o)¶ Возвращает true, если o объект является объектом типа, включая сущности типов, производные от объекта стандартного типа. Возвращает false во всех остальных случаях.
-
int
PyType_CheckExact
(PyObject *o)¶ Возвращает true, если o объекта является объектом типа, но не подтипом объекта стандартного типа. Возвращает false во всех остальных случаях.
-
unsigned int
PyType_ClearCache
()¶ Очистить внутренний кэш поиска. Возвращает тег текущей версии.
-
unsigned long
PyType_GetFlags
(PyTypeObject* type)¶ Возвращает
tp_flags
член type. Эта функция предназначена в первую очередь для использования с 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)¶ Возвращает true, если объект типа o задает feature элемента. Функции типа обозначаются одноразрядными флагами.
-
int
PyType_IS_GC
(PyTypeObject *o)¶ Возвращает true, если объект типа включает в себя поддержку детектора цикла; при этом проверяется
Py_TPFLAGS_HAVE_GC
типа флага.
-
int
PyType_IsSubtype
(PyTypeObject *a, PyTypeObject *b)¶ Возвращает true, если a является подтипом b.
Эта функция проверяет только фактические подтипы, что означает, что
__subclasscheck__()
не вызывается для b. ВызовPyObject_IsSubclass()
, чтобы сделать ту же проверку, что иissubclass()
.
-
PyObject*
PyType_GenericAlloc
(PyTypeObject *type, Py_ssize_t nitems)¶ - Return value: New reference.
Общий обработчик для
tp_alloc
слота типа объекта. Используйте механизм распределения памяти Python по умолчанию, чтобы аллокации новой сущности и инициализировать все его содержимое дляNULL
.
-
PyObject*
PyType_GenericNew
(PyTypeObject *type, PyObject *args, PyObject *kwds)¶ - Return value: New reference.
Общий обработчик для
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.
Создание аллоцированных в куче типов¶
Следующие функции и структуры используются для создания типов кучи.
-
PyObject*
PyType_FromSpecWithBases
(PyType_Spec *spec, PyObject *bases)¶ - Return value: New reference.
Создает и возвращает объект типа кучи из 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)¶ - Return value: New reference.
Эквивалентно
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_dealloc
Py_nb_add
устанавливаетPyNumberMethods.nb_add
Py_sq_length
устанавливаетPySequenceMethods.sq_length
Следующие поля нельзя задать с помощью
PyType_Spec
иPyType_Slot
:tp_dict
tp_mro
tp_cache
tp_subclasses
tp_weaklist
tp_print
tp_weaklistoffset
tp_dictoffset
bf_getbuffer
bf_releasebuffer
Установка
Py_tp_bases
илиPy_tp_base
может быть проблематичной на некоторых платформах. Чтобы избежать проблем, используйте вместо этого аргумент bases: py:func:PyType_FromSpecWithBases.
-
void *
PyType_Slot.pfunc
¶ Желаемое значение слота. В большинстве случаев это указатель на функцию.
Может быть не
NULL
.
-
int