Об’єкти типу¶
-
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 totp_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 includePy_TPFLAGS_HAVE_GC
in its flags then it must implement the GC protocol itself by at least implementing thetp_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. SeePyCMethod
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 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_basicsize
andPyTypeObject.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_dealloc
Py_nb_add
для встановленняPyNumberMethods.nb_add
Py_sq_length
для встановленняPySequenceMethods.sq_length
The following fields cannot be set at all using
PyType_Spec
andPyType_Slot
:tp_weaklistoffset
(see PyMemberDef)tp_dictoffset
(see PyMemberDef)
The following fields cannot be set using
PyType_Spec
andPyType_Slot
under the limited API:Setting
Py_tp_bases
orPy_tp_base
may 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