Об’єкти типу

PyTypeObject

Структура C об’єктів, що використовуються для опису вбудованих типів.

PyObject* PyType_Type

Це об’єкт типу для об’єктів типу; це той самий об’єкт, що й type на рівні Python.

int PyType_Check(PyObject *o)

Return true if the object o is a type object, including instances of types derived from the standard type object. Return false in all other cases.

int PyType_CheckExact(PyObject *o)

Return true if the object o is a type object, but not a subtype of the standard type object. Return false in all other cases.

unsigned int PyType_ClearCache()

Очистіть внутрішній кеш пошуку. Повернути тег поточної версії.

unsigned long PyType_GetFlags(PyTypeObject* type)

Return the tp_flags member of type. This function is primarily meant for use with Py_LIMITED_API; the individual flag bits are guaranteed to be stable across Python releases, but access to tp_flags itself is not part of the limited API.

Нове в версії 3.2.

Змінено в версії 3.4: Тип повернення тепер unsigned long, а не long.

void PyType_Modified(PyTypeObject *type)

Визнати недійсним внутрішній кеш пошуку для типу та всіх його підтипів. Цю функцію необхідно викликати після будь-якої ручної зміни атрибутів або базових класів типу.

int PyType_HasFeature(PyTypeObject *o, int feature)

Return true if the type object o sets the feature feature. Type features are denoted by single bit flags.

int PyType_IS_GC(PyTypeObject *o)

Return true if the type object includes support for the cycle detector; this tests the type flag 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)
Return value: New reference.

Загальний обробник для слота tp_alloc об’єкта типу. Використовуйте стандартний механізм виділення пам’яті Python, щоб виділити новий екземпляр та ініціалізувати весь його вміст як NULL.

PyObject* PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
Return value: New reference.

Загальний обробник для слота tp_new об’єкта типу. Створіть новий екземпляр, використовуючи слот типу tp_alloc.

int PyType_Ready(PyTypeObject *type)

Завершення об’єкта типу. Це слід викликати для всіх об’єктів типу, щоб завершити їх ініціалізацію. Ця функція відповідає за додавання успадкованих слотів від базового класу типу. Повертає 0 у разі успіху або -1 і встановлює виняток у випадку помилки.

void* PyType_GetSlot(PyTypeObject *type, int slot)

Повертає вказівник функції, що зберігається у вказаному слоті. Якщо результат NULL, це означає, що або слот має NULL, або що функцію було викликано з недійсними параметрами. Викликачі зазвичай перетворюють покажчик результату на відповідний тип функції.

Перегляньте PyType_Slot.slot, щоб дізнатися про можливі значення аргументу slot.

An exception is raised if type is not a heap type.

Нове в версії 3.4.

Створення типів, виділених у купі

Наступні функції та структури використовуються для створення типів купи.

PyObject* PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
Return value: New reference.

Creates and returns a heap type object from the spec (Py_TPFLAGS_HEAPTYPE).

If bases is a tuple, the created heap type contains all types contained in it as base types.

If bases is NULL, the Py_tp_bases slot is used instead. If that also is NULL, the Py_tp_base slot is used instead. If that also is NULL, the new type derives from object.

Ця функція викликає PyType_Ready() для нового типу.

Нове в версії 3.3.

PyObject* PyType_FromSpec(PyType_Spec *spec)
Return value: New reference.

Equivalent to PyType_FromSpecWithBases(spec, NULL).

PyType_Spec

Структура, що визначає поведінку типу.

const char* PyType_Spec.name

Назва типу, що використовується для встановлення PyTypeObject.tp_name.

int PyType_Spec.basicsize
int PyType_Spec.itemsize

Size of the instance in bytes, used to set PyTypeObject.tp_basicsize and 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_. Наприклад, використовуйте:

The following fields cannot be set using PyType_Spec and PyType_Slot:

Setting Py_tp_bases or Py_tp_base may be problematic on some platforms. To avoid issues, use the bases argument of PyType_FromSpecWithBases() instead.

void *PyType_Slot.pfunc

Бажане значення слота. У більшості випадків це вказівник на функцію.

May not be NULL.