Spec-Zone.ru › Python 3.10

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

type PyTypeObject
Часть Ограниченного API (как непрозрачная структура).

Структура C объектов, используемых для описания встроенных типов.

PyTypeObject PyType_Type
Часть Стабильного ABI.

Это объект типа для объектов типа; он является тем же объектом, что и type в слое Python.

int PyType_Check(PyObject *o)

Возвращает ненулевое значение, если объект o является объектом типа, включая экземпляры типов, производных от стандартного объекта типа. Возвращает 0 во всех остальных случаях. Эта функция всегда выполняется успешно.

int PyType_CheckExact(PyObject *o)

Возвращает ненулевое значение, если объект o является объектом типа, но не подтипом стандартного объекта типа. Возвращает 0 во всех остальных случаях. Эта функция всегда выполняется успешно.

unsigned int PyType_ClearCache()
Часть Стабильного ABI.

Очистить внутренший кэш поиска. Возвращает текущую метку версии.

unsigned long PyType_GetFlags(PyTypeObject *type)
Часть Стабильного ABI.

Возвращает член tp_flags объекта type. Эта функция предназначена в основном для использования с Py_LIMITED_API; отдельные биты флагов гарантированно стабильны в выпусках Python, но доступ к tp_flags сам по себе не входит в ограниченное API.

Введено в версии 3.2.

Изменено в версии 3.4: Возвращаемый тип теперь unsigned long вместо long.

void PyType_Modified(PyTypeObject *type)
Часть Стабильного ABI.

Установить внутренний кэш поиска для типа и всех его подтипов. Эта функция должна вызываться после любых ручных изменений атрибутов или базовых классов типа.

int PyType_HasFeature(PyTypeObject *o, int feature)

Возвращает ненулевое значение, если объект типа o устанавливает функцию feature. Функции типа обозначаются флагами по одному биту.

int PyType_IS_GC(PyTypeObject *o)

Возвращает true, если объект типа включает поддержку детектора циклов; это проверяет флаг типа Py_TPFLAGS_HAVE_GC.

int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)
Часть Стабильного ABI.

Возвращает true, если a является подтипом b.

Эта функция проверяет только фактические подтипы, что означает, что __subclasscheck__() не вызывается для b. Вызовите PyObject_IsSubclass(), чтобы выполнить ту же проверку, что и issubclass().

PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
Значение возврата: новая ссылка. Часть Стабильного ABI.

Общий обработчик для слота tp_alloc объекта типа. Используйте механизм выделения памяти по умолчанию Python для выделения нового экземпляра и инициализации всех его содержимого значением NULL.

PyObject *PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
Значение возврата: новая ссылка. Часть Стабильного ABI.

Общий обработчик для слота tp_new объекта типа. Создайте новый экземпляр с использованием слота tp_alloc типа.

int PyType_Ready(PyTypeObject *type)
Часть Стабильного ABI.

Завершение объекта типа. Это необходимо вызвать для всех объектов типа, чтобы завершить их инициализацию. Эта функция отвечает за добавление унаследованных слотов из базового класса типа. Возвращает 0 при успехе или -1 и устанавливает исключение при ошибке.

Примечание

Если некоторые из базовых классов реализуют протокол GC, а предоставленный тип не включает Py_TPFLAGS_HAVE_GC в своих флагах, то протокол GC будет автоматически реализован от родителей. Напротив, если создаваемый тип включает Py_TPFLAGS_HAVE_GC в своих флагах, то он должен реализовать протокол GC сам, по крайней мере, реализовав обработчик tp_traverse.

void *PyType_GetSlot(PyTypeObject *type, int slot)
Часть Стабильного ABI с версии 3.4.

Возвращает указатель на функцию, хранящуюся в заданном слоте. Если результат NULL, это указывает, что либо слот NULL, либо функция была вызвана с недопустимыми параметрами. Звонящие обычно преобразуют указатель результата в соответствующий тип функции.

См. PyType_Slot.slot для возможных значений аргумента slot.

Введено в версии 3.4.

Изменено в версии 3.10:PyType_GetSlot() теперь может принимать все типы. Ранее он был ограничен типами кучи.

PyObject *PyType_GetModule(PyTypeObject *type)
Часть Стабильного ABI с версии 3.10.

Возвращает объект модуля, связанный с заданным типом, когда тип был создан с использованием PyType_FromModuleAndSpec().

Если с заданным типом не связан модуль, устанавливает TypeError и возвращает NULL.

Эта функция обычно используется для получения модуля, в котором определен метод. Обратите внимание, что в таком методе PyType_GetModule(Py_TYPE(self)) может не вернуть ожидаемый результат. Py_TYPE(self) может быть подтипом целевого класса, а подклассы не обязательно определяются в том же модуле, что и их суперкласс. См. PyCMethod для получения класса, который определяет метод.

Введено в версии 3.9.

void *PyType_GetModuleState(PyTypeObject *type)
Часть Стабильного ABI с версии 3.10.

Возвращает состояние объекта модуля, связанного с заданным типом. Это сокращение для вызова PyModule_GetState() на результате PyType_GetModule().

Если с заданным типом не связан модуль, устанавливает TypeError и возвращает NULL.

Если у type есть связанный модуль, но его состояние NULL, возвращает NULL без установки исключения.

Введено в версии 3.9.

END_OF_DOCUMENT_MARKER

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

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

PyObject *PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)
Значение возврата: новая ссылка. Часть стабильной ABI с версии 3.10.

Создаёт и возвращает тип, размещаемый в куче из spec (Py_TPFLAGS_HEAPTYPE).

Аргумент bases может быть использован для указания базовых классов; он может быть либо только одним классом, либо кортежем классов. Если bases NULL, используется слот Py_tp_bases. Если и этот слот NULL, используется слот Py_tp_base. Если и этот слот NULL, новый тип наследуется от object.

Аргумент module может быть использован для записи модуля, в котором определён новый класс. Он должен быть объектом модуля или NULL. Если не NULL, модуль ассоциируется с новым типом и его позже можно получить с помощью PyType_GetModule(). Ассоциированный модуль не наследуется подклассами; он должен быть указан для каждого класса индивидуально.

Эта функция вызывает PyType_Ready() для нового типа.

Добавлена в версии 3.9.

Изменено в версии 3.10: Функция теперь принимает один класс в качестве аргумента bases и NULL в качестве слота tp_doc.

PyObject *PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
Значение возврата: новая ссылка. Часть стабильной ABI с версии 3.3.

Эквивалентно PyType_FromModuleAndSpec(NULL, spec, bases).

Добавлена в версии 3.3.

PyObject *PyType_FromSpec(PyType_Spec *spec)
Значение возврата: новая ссылка. Часть стабильной ABI.

Эквивалентно PyType_FromSpecWithBases(spec, NULL).

type PyType_Spec
Часть стабильной ABI (включая все члены).

Структура, определяющая поведение типа.

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}.

type PyType_Slot
Часть стабильной ABI (включая все члены).

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

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_vectorcall
  • tp_weaklistoffset (см. PyMemberDef)
  • tp_dictoffset (см. PyMemberDef)
  • tp_vectorcall_offset (см. PyMemberDef)

Следующие поля нельзя установить, используя PyType_Spec и PyType_Slot в рамках ограниченного API:

  • bf_getbuffer
  • bf_releasebuffer

Установка Py_tp_bases или Py_tp_base может быть проблематичной на некоторых платформах. Чтобы избежать проблем, используйте аргумент bases функции PyType_FromSpecWithBases().

Изменено в версии 3.9: Слот в PyBufferProcs могут быть установлены в расширенном API.

void *PyType_Slot.pfunc

Желаемое значение слота. В большинстве случаев это указатель на функцию.

Слот, отличный от Py_tp_doc, может не быть NULL.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/c-api/type.html

Spec-Zone.ru

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