Spec-Zone.ru › Python 3.11

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

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 обработчик.

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

Возвращает имя типа. Эквивалентно получению атрибута __name__ типа.

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

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

Возвращает полное имя типа. Эквивалентно получению атрибута __qualname__ типа.

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

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 для получения класса, определяющего метод. См. PyType_GetModuleByDef() для случаев, когда PyCMethod не может быть использован.

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

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

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

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

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

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

PyObject *PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def)

Находит первый суперкласс, модуль которого был создан из заданного PyModuleDef def и возвращает этот модуль.

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

Эта функция предназначена для совместного использования с PyModule_GetState() для получения состояния модуля из методов слотов (таких как tp_init или nb_add) и других мест, где определяющий класс метода нельзя передать с помощью соглашения вызова PyCMethod.

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

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

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

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)

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

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

Изменено в версии 3.11: bf_getbuffer и bf_releasebuffer теперь доступны в рамках ограниченного API.

void *PyType_Slot.pfunc

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

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

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

Spec-Zone.ru

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