Объекты типов
-
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.
Создание типов, размещаемых в куче
Следующие функции и структуры используются для создания типов, размещаемых в куче.
-
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_dicttp_mrotp_cachetp_subclassestp_weaklisttp_vectorcall-
tp_weaklistoffset(см. PyMemberDef) -
tp_dictoffset(см. PyMemberDef) -
tp_vectorcall_offset(см. PyMemberDef)
Следующие поля нельзя установить, используя
PyType_SpecиPyType_Slotв рамках ограниченного API:Установка
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