Объекты типа¶
- 
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_deallocPy_nb_addустанавливаетPyNumberMethods.nb_addPy_sq_lengthустанавливаетPySequenceMethods.sq_length
Следующие поля нельзя задать с помощью
PyType_SpecиPyType_Slot:tp_dicttp_mrotp_cachetp_subclassestp_weaklisttp_printtp_weaklistoffsettp_dictoffsetbf_getbufferbf_releasebuffer
Установка
Py_tp_basesилиPy_tp_baseможет быть проблематичной на некоторых платформах. Чтобы избежать проблем, используйте вместо этого аргумент bases: py:func:PyType_FromSpecWithBases.
- 
void *
PyType_Slot.pfunc¶ Желаемое значение слота. В большинстве случаев это указатель на функцию.
Может быть не
NULL.
- 
int 
 
