Объекты типов
-
PyTypeObject -
Структура C-объектов, используемых для описания встроенных типов.
-
PyObject* PyType_Type -
Это объект типа для объектов типов; он является тем же объектом, что и
typeна уровне Python.
-
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) -
Значение возврата: Новая ссылка.
Общий обработчик для слота
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.
Создание типов, выделенных в куче
Следующие функции и структуры используются для создания типов, выделенных в куче.
-
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}.
-
-
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_dicttp_mrotp_cachetp_subclassestp_weaklisttp_printtp_weaklistoffsettp_dictoffsetbf_getbufferbf_releasebuffer
Установка
Py_tp_basesилиPy_tp_baseможет быть проблематична на некоторых платформах. Чтобы избежать проблем, используйте аргумент bases функцииPyType_FromSpecWithBases()вместо этого. -
-
void *PyType_Slot.pfunc -
Желаемое значение слота. В большинстве случаев это указатель на функцию.
Не может быть
NULL.
-
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/c-api/type.html