Spec-Zone.ru › Python 3.8

Объекты типов

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.

END_OF_DOCUMENT_MARKER

Создание типов, выделенных в куче

Следующие функции и структуры используются для создания типов, выделенных в куче.

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_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 функции 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API