Объекты типа
-
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
может быть проблематичной на некоторых платформах. Чтобы избежать проблем, используйте вместо него аргумент basesPyType_FromSpecWithBases()
.
-
void *
PyType_Slot.pfunc
Желаемое значение слота. В большинстве случаев это указатель на функцию.
Может быть не
NULL
.
-
int