Содержание страницы
Объекты типов¶Type Objects
-
type PyTypeObject¶
- Часть Limited API (как непрозрачная структура).
C-структура объектов, используемая для описания встроенных типов.
-
PyTypeObject PyType_Type¶
- Часть Stable ABI.
Это объект типа для объектов-типов; он совпадает с объектом
typeна уровне Python.
-
int PyType_Check(PyObject *o)¶
Возвращает ненулевое значение, если объект o является объектом-типом, включая экземпляры типов, производных от стандартного объекта-типа. Возвращает 0 во всех остальных случаях. Эта функция всегда завершается успешно.
-
int PyType_CheckExact(PyObject *o)¶
Возвращает ненулевое значение, если объект o является объектом-типом, но не подтипом стандартного объекта-типа. Возвращает 0 во всех остальных случаях. Эта функция всегда завершается успешно.
-
unsigned int PyType_ClearCache()¶
- Часть Stable ABI.
Очищает внутренний кеш поиска. Возвращает текущий тег версии.
-
unsigned long PyType_GetFlags(PyTypeObject *type)¶
- Часть Stable ABI.
Возвращает член
tp_flagsобъекта type. Эта функция в первую очередь предназначена для использования сPy_LIMITED_API; отдельные биты флагов гарантированно стабильны между версиями Python, но доступ к самомуtp_flagsне является частью ограниченного API.Новое в версии 3.2.
Изменено в версии 3.4: Тип возвращаемого значения теперь
unsigned long, а неlong.
-
void PyType_Modified(PyTypeObject *type)¶
- Часть Stable ABI.
Аннулирует внутренний кеш поиска для типа и всех его подтипов. Эта функция должна вызываться после любого ручного изменения атрибутов или базовых классов типа.
-
int PyType_HasFeature(PyTypeObject *o, int feature)¶
Возвращает ненулевое значение, если объект типа o устанавливает признак feature. Признаки типов обозначаются одноразрядными флагами.
-
int PyType_IS_GC(PyTypeObject *o)¶
Возвращает истину, если объект типа поддерживает детектор циклов; это проверяет флаг типа
Py_TPFLAGS_HAVE_GC.
-
int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)¶
- Часть Stable ABI.
Возвращает истину, если a является подтипом b.
Эта функция проверяет только непосредственные подтипы, то есть
__subclasscheck__()не вызывается для b. ВызовитеPyObject_IsSubclass(), чтобы выполнить ту же проверку, что иissubclass().
-
PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Универсальный обработчик для слота
tp_allocобъекта-типа. Использует стандартный механизм выделения памяти Python для создания нового экземпляра и инициализации всего его содержимого значениемNULL.
-
PyObject *PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Универсальный обработчик для слота
tp_newобъекта-типа. Создаёт новый экземпляр, используя слотtp_allocтипа.
-
int PyType_Ready(PyTypeObject *type)¶
- Часть Stable ABI.
Завершает инициализацию объекта типа. Должна вызываться для всех объектов типа, чтобы завершить их инициализацию. Эта функция отвечает за добавление наследуемых слотов из базового класса. Возвращает
0при успехе, или-1и устанавливает исключение при ошибке.Примечание
If some of the base classes implements the GC protocol and the provided type does not include the
Py_TPFLAGS_HAVE_GCin its flags, then the GC protocol will be automatically implemented from its parents. On the contrary, if the type being created does includePy_TPFLAGS_HAVE_GCin its flags then it must implement the GC protocol itself by at least implementing thetp_traversehandle.
-
PyObject *PyType_GetName(PyTypeObject *type)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.11.
Возвращает имя типа. Эквивалентно получению атрибута
__name__.Новое в версии 3.11.
-
PyObject *PyType_GetQualName(PyTypeObject *type)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.11.
Возвращает квалифицированное имя типа. Эквивалентно получению атрибута
__qualname__типа.Новое в версии 3.11.
-
void *PyType_GetSlot(PyTypeObject *type, int slot)¶
- Часть Stable ABI начиная с версии 3.4.
Возвращает указатель на функцию, хранящийся в указанном слоте. Если результат равен
NULL, это означает, что либо слотNULL, либо функция была вызвана с недопустимыми параметрами. Обычно вызывающий код приводит указатель результата к соответствующему типу функции.См.
PyType_Slot.slotдля возможных значений аргумента slot.Новое в версии 3.4.
Изменено в версии 3.10:
PyType_GetSlot()теперь может принимать все типы. Ранее он был ограничен динамическими типами (heap types).
-
PyObject *PyType_GetModule(PyTypeObject *type)¶
- Часть Stable 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)¶
- Часть Stable ABI начиная с версии 3.10.
Возвращает состояние объекта модуля, связанного с данным типом. Это сокращение для вызова
PyModule_GetState()для результатаPyType_GetModule().Если с данным типом не связан ни один модуль, устанавливает
TypeErrorи возвращаетNULL.Если с type связан модуль, но его состояние равно
NULL, возвращаетNULLбез установки исключения.Новое в версии 3.9.
-
PyObject *PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def)¶
Найти первый суперкласс, модуль которого был создан из заданного
PyModuleDefdef, и вернуть этот модуль.Если модуль не найден, возбуждает
TypeErrorи возвращаетNULL.Эта функция предназначена для использования совместно с
PyModule_GetState()для получения состояния модуля из слотовых методов (таких какtp_initилиnb_add) и других мест, где определяющий класс метода не может быть передан с помощью соглашения о вызовеPyCMethod.Новое в версии 3.11.
Создание типов, размещаемых в куче¶Creating Heap-Allocated Types
Следующие функции и структуры используются для создания динамических типов.
-
PyObject *PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.10.
Создаёт и возвращает динамический тип (heap type) из 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)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Эквивалентно
PyType_FromSpecWithBases(spec, NULL).
-
type PyType_Spec¶
- Часть Stable 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}.
-
const char *PyType_Spec.name¶
-
type PyType_Slot¶
- Часть Stable ABI (включая все члены).
Структура, определяющая дополнительную функциональность типа, содержащая идентификатор слота и указатель на значение.
-
int PyType_Slot.slot¶
Идентификатор слота.
Идентификаторы слотов именуются подобно именам полей структур
PyTypeObject,PyNumberMethods,PySequenceMethods,PyMappingMethodsиPyAsyncMethodsс добавлением префиксаPy_. Например, используйте:Py_tp_deallocдля установкиPyTypeObject.tp_deallocPy_nb_addдля установкиPyNumberMethods.nb_addPy_sq_lengthдля установкиPySequenceMethods.sq_length
Следующие поля вообще нельзя задать с помощью
PyType_SpecиPyType_Slot:tp_weaklistoffset(см. PyMemberDef)tp_dictoffset(см. 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.
-
int PyType_Slot.slot¶