Об’єкти типу

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)

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)

Повертає ненульове значення, якщо об’єкт типу o встановлює функцію feature. Функції типу позначаються однобітовими прапорцями.

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 і встановлює виняток у випадку помилки.

Примітка

If some of the base classes implements the GC protocol and the provided type does not include the Py_TPFLAGS_HAVE_GC in its flags, then the GC protocol will be automatically implemented from its parents. On the contrary, if the type being created does include Py_TPFLAGS_HAVE_GC in its flags then it must implement the GC protocol itself by at least implementing the tp_traverse handle.

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_GetModule(PyTypeObject *type)

Повертає об’єкт модуля, пов’язаний із заданим типом, коли тип було створено за допомогою PyType_FromModuleAndSpec().

Якщо жоден модуль не пов’язаний із заданим типом, встановлюється TypeError і повертається NULL.

This function is usually used to get the module in which a method is defined. Note that in such a method, PyType_GetModule(Py_TYPE(self)) may not return the intended result. Py_TYPE(self) may be a subclass of the intended class, and subclasses are not necessarily defined in the same module as their superclass. See PyCMethod to get the class that defines the method.

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

void* PyType_GetModuleState(PyTypeObject *type)

Повертає стан об’єкта модуля, пов’язаного з заданим типом. Це ярлик для виклику PyModule_GetState() за результатом PyType_GetModule().

Якщо жоден модуль не пов’язаний із заданим типом, встановлюється TypeError і повертається NULL.

Якщо тип має пов’язаний модуль, але його стан NULL, повертає NULL без встановлення винятку.

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

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

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

PyObject* PyType_FromModuleAndSpec(PyObject *module, 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.

Аргумент module можна використовувати для запису модуля, в якому визначено новий клас. Це має бути об’єкт модуля або NULL. Якщо не NULL, модуль асоціюється з новим типом і може бути пізніше отриманий за допомогою PyType_GetModule(). Асоційований модуль не успадковується підкласами; її необхідно вказувати для кожного класу окремо.

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

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

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

Equivalent to PyType_FromModuleAndSpec(NULL, spec, bases).

Нове в версії 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 at all using PyType_Spec and PyType_Slot:

The following fields cannot be set using PyType_Spec and PyType_Slot under the limited API:

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.

Змінено в версії 3.9: Слоти в PyBufferProcs можна встановити в необмеженому API.

void *PyType_Slot.pfunc

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

May not be NULL.