Типовые объекты¶
-
type
PyTypeObject
¶ - Part of the Limited API (as an opaque struct).
Структура C объектов, используемых для описания встроенных типов.
-
PyTypeObject
PyType_Type
¶ - Part of the Stable ABI.
Это объект типа для объектов типа; это тот же объект, что и
type
в слое Python.
-
int
PyType_Check
(PyObject *o)¶ Возвращает ненулевое значение, если объект o является объектом типа, включая экземпляры типов, производных от стандартного объекта типа. Во всех остальных случаях возвращается 0. Эта функция всегда успешна.
-
int
PyType_CheckExact
(PyObject *o)¶ Возвращает ненулевое значение, если объект o является объектом типа, но не подтипом стандартного типа object. Во всех остальных случаях возвращается 0. Эта функция всегда успешна.
-
unsigned int
PyType_ClearCache
()¶ - Part of the Stable ABI.
Очистить внутренний кэш поиска. Вернуть текущий тег версии.
-
unsigned long
PyType_GetFlags
(PyTypeObject *type)¶ - Part of the Stable ABI.
Возвращает член
tp_flags
от type. Эта функция в первую очередь предназначена для использования с Py_LIMITED_API; отдельные биты флагов гарантированно стабильны во всех выпусках Python, но доступ кtp_flags
сам по себе не является частью ограниченного API.Добавлено в версии 3.2.
Изменено в версии 3.4: Тип возврата теперь
unsigned long
, а неlong
.
-
void
PyType_Modified
(PyTypeObject *type)¶ - Part of the Stable 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)¶ - Part of the Stable ABI.
Возвращает true, если a является подтипом b.
Эта функция проверяет только фактические подтипы, что означает, что
__subclasscheck__()
не вызывается на b. ВызовитеPyObject_IsSubclass()
, чтобы выполнить ту же проверку, что иissubclass()
.
-
PyObject *
PyType_GenericAlloc
(PyTypeObject *type, Py_ssize_t nitems)¶ - Return value: New reference. Part of the Stable ABI.
Общий обработчик для слота
tp_alloc
объекта типа. Используйте механизм распределения памяти Python по умолчанию для выделения нового экземпляра и инициализации всего его содержимого вNULL
.
-
PyObject *
PyType_GenericNew
(PyTypeObject *type, PyObject *args, PyObject *kwds)¶ - Return value: New reference. Part of the Stable ABI.
Общий обработчик для слота
tp_new
объекта типа. Создайте новый экземпляр, используя слотtp_alloc
типа.
-
int
PyType_Ready
(PyTypeObject *type)¶ - Part of the Stable ABI.
Завершить инициализацию объекта типа. Эта функция должна вызываться для всех объектов типа, чтобы завершить их инициализацию. Эта функция отвечает за добавление унаследованных слотов от базового класса типа. Возвращает
0
при успехе, или возвращает-1
и устанавливает исключение при ошибке.Примечание
Если какой-то из базовых классов реализует протокол GC, а создаваемый тип не включает
Py_TPFLAGS_HAVE_GC
в свои флаги, то протокол GC будет автоматически реализован от его родителей. Напротив, если создаваемый тип включаетPy_TPFLAGS_HAVE_GC
в свои флаги, то он должен сам реализовать протокол GC, по крайней мере, реализовав хэндлtp_traverse
.
-
void *
PyType_GetSlot
(PyTypeObject *type, int slot)¶ - Part of the Stable ABI since version 3.4.
Возвращает указатель функции, хранящийся в заданном слоте. Если результат равен
NULL
, это означает, что либо слот равенNULL
, либо функция была вызвана с недопустимыми параметрами. Вызывающие функции обычно приводят указатель результата к соответствующему типу функции.Возможные значения аргумента slot см. в
PyType_Slot.slot
.Добавлено в версии 3.4.
Изменено в версии 3.10:
PyType_GetSlot()
теперь может принимать все типы. Ранее он был ограничен heap types.
-
PyObject *
PyType_GetModule
(PyTypeObject *type)¶ - Part of the Stable ABI since version 3.10.
Возвращает объект модуля, связанный с данным типом, когда тип был создан с помощью
PyType_FromModuleAndSpec()
.Если с данным типом не связан ни один модуль, устанавливает
TypeError
и возвращаетNULL
.Эта функция обычно используется для получения модуля, в котором определен метод. Обратите внимание, что в таком методе
PyType_GetModule(Py_TYPE(self))
может не возвращать предполагаемый результат.Py_TYPE(self)
может быть подклассом предполагаемого класса, а подклассы не обязательно определены в том же модуле, что и их суперкласс. СмотритеPyCMethod
, чтобы получить класс, определяющий метод.Добавлено в версии 3.9.
-
void *
PyType_GetModuleState
(PyTypeObject *type)¶ - Part of the Stable ABI since version 3.10.
Возвращает состояние объекта модуля, связанного с заданным типом. Это сокращение для вызова
PyModule_GetState()
на результатPyType_GetModule()
.Если с данным типом не связан ни один модуль, устанавливает
TypeError
и возвращаетNULL
.Если тип имеет связанный модуль, но его состояние
NULL
, возвращаетNULL
без установки исключения.Добавлено в версии 3.9.
Создание типов, распределенных по куче¶
Для создания heap types используются следующие функции и структуры.
-
PyObject *
PyType_FromModuleAndSpec
(PyObject *module, PyType_Spec *spec, PyObject *bases)¶ - Return value: New reference. Part of the Stable ABI since version 3.10.
Создает и возвращает heap type из спека (
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)¶ - Return value: New reference. Part of the Stable ABI since version 3.3.
Эквивалентно
PyType_FromModuleAndSpec(NULL, spec, bases)
.Добавлено в версии 3.3.
-
PyObject *
PyType_FromSpec
(PyType_Spec *spec)¶ - Return value: New reference. Part of the Stable ABI.
Эквивалентно
PyType_FromSpecWithBases(spec, NULL)
.
-
type
PyType_Spec
¶ - Part of the Stable ABI (including all members).
Структура, определяющая поведение типа.
-
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}
.
-
const char *
-
type
PyType_Slot
¶ - Part of the Stable ABI (including all members).
Структура, определяющая дополнительную функциональность типа, содержащая идентификатор слота и указатель значения.
-
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_weaklistoffset
(см. PyMemberDef)tp_dictoffset
(см. 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
.
-
int