Об’єкти типу¶
-
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_flagsmember 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 totp_flagsitself 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.
This function only checks for actual subtypes, which means that
__subclasscheck__()is not called on b. CallPyObject_IsSubclass()to do the same check thatissubclass()would do.
-
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_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.
-
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. SeePyCMethodto 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 isNULL, the Py_tp_base slot is used instead. If that also isNULL, the new type derives fromobject.Аргумент 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_basicsizeandPyTypeObject.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_Slot¶ Структура, що визначає необов’язкову функціональність типу, що містить ідентифікатор слота та покажчик значення.
-
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
The following fields cannot be set at all using
PyType_SpecandPyType_Slot:tp_weaklistoffset(see PyMemberDef)tp_dictoffset(see PyMemberDef)
The following fields cannot be set using
PyType_SpecandPyType_Slotunder the limited API:Setting
Py_tp_basesorPy_tp_basemay be problematic on some platforms. To avoid issues, use the bases argument ofPyType_FromSpecWithBases()instead.Змінено в версії 3.9: Слоти в
PyBufferProcsможна встановити в необмеженому API.
-
void *
PyType_Slot.pfunc¶ Бажане значення слота. У більшості випадків це вказівник на функцію.
May not be
NULL.
-
int