Объекты типов
-
PyTypeObject -
Структура C объектов, используемых для описания встроенных типов.
-
PyTypeObject PyType_Type -
Это объект типа для объектов типа; он совпадает с объектом
typeна уровне Python.
-
int PyType_Check(PyObject *o) -
Возвращает ненулевое значение, если объект o является объектом типа, включая экземпляры типов, полученных от стандартного объекта типа. Возвращает 0 во всех остальных случаях. Эта функция всегда выполняется успешно.
-
int PyType_CheckExact(PyObject *o) -
Возвращает ненулевое значение, если объект o является объектом типа, но не является подтипом стандартного объекта типа. Возвращает 0 во всех остальных случаях. Эта функция всегда выполняется успешно.
-
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) -
Возвращает ненулевое значение, если объект типа 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и устанавливает исключение при ошибке.Примечание
Если некоторые базовые классы реализуют протокол GC, а предоставленный тип не включает
Py_TPFLAGS_HAVE_GCв своих флагах, то протокол GC будет автоматически реализован от его родителей. Напротив, если создаваемый тип включаетPy_TPFLAGS_HAVE_GCв своих флагах, то он **обязательно** должен реализовать сам протокол GC, по крайней мере, реализуяtp_traverseобработчик.
-
void* PyType_GetSlot(PyTypeObject *type, int slot) -
Возвращает указатель на функцию, хранящийся в заданном слоте. Если результат
NULL, это указывает на то, что либо слотNULL, или что функция была вызвана с недопустимыми параметрами. Звонящие обычно преобразуют указатель результата в соответствующий тип функции.См.
PyType_Slot.slotдля возможных значений аргумента slot.Исключение генерируется, если type не является типом кучи.
Новое в версии 3.4.
-
PyObject* PyType_GetModule(PyTypeObject *type) -
Возвращает объект модуля, связанный с данным типом, когда тип был создан с помощью
PyType_FromModuleAndSpec().Если с данным типом не связан ни один модуль, устанавливается
TypeErrorи возвращаетсяNULL.Эта функция обычно используется для получения модуля, в котором определен метод. Обратите внимание, что в таком методе
PyType_GetModule(Py_TYPE(self))может не вернуть ожидаемый результат.Py_TYPE(self)может быть *подклассом* целевого класса, а подклассы не обязательно определяются в том же модуле, что и их суперкласс. См.PyCMethod, чтобы получить класс, определяющий метод.Новое в версии 3.9.
-
void* PyType_GetModuleState(PyTypeObject *type) -
Возвращает состояние объекта модуля, связанного с данным типом. Это сокращение для вызова
PyModule_GetState()по результатамPyType_GetModule().Если с данным типом не связан ни один модуль, устанавливается
TypeErrorи возвращаетсяNULL.Если у type есть связанный модуль, но его состояние
NULL, возвращаетNULLбез установки исключения.Новое в версии 3.9.
Создание типов, размещаемых в куче
Следующие функции и структуры используются для создания типов, размещаемых в куче.
-
PyObject* PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) -
Значение возврата: Новая ссылка.
Создаёт и возвращает объект типа, размещаемого в куче, из 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.
-
PyObject* PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases) -
Значение возврата: Новая ссылка.
Эквивалентно
PyType_FromModuleAndSpec(NULL, spec, bases).Введено в версии 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_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 -
Желаемое значение слота. В большинстве случаев это указатель на функцию.
Не может быть
NULL.
-
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/c-api/type.html