Объекты типов
-
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.
-
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) -
Находит первый суперкласс, модуль которого был создан из заданного
PyModuleDefdef и возвращает этот модуль.Если модуль не найден, генерирует
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_dicttp_mrotp_cachetp_subclassestp_weaklisttp_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