型オブジェクト

PyTypeObject

組み込み型を記述する際に用いられる、オブジェクトを表す C 構造体です。

PyObject* PyType_Type

型オブジェクト自身の型オブジェクトです; Python レイヤにおける type と同じオブジェクトです。

int PyType_Check(PyObject *o)

オブジェクト o が型オブジェクトの場合に真を返します。標準型オブジェクトから派生したサブタイプのインスタンスも含みます。その他の場合には偽を返します。

int PyType_CheckExact(PyObject *o)

オブジェクト o が型オブジェクトの場合に真を返します。標準型のサブタイプの場合は含みません。その他の場合には偽を返します。

unsigned int PyType_ClearCache()

内部の検索キャッシュをクリアします。現在のバージョンタグを返します。

unsigned long PyType_GetFlags(PyTypeObject* type)

type のメンバーである tp_flags を返します。この関数は基本的に Py_LIMITED_API を定義して使うことを想定しています。それぞれのフラグはpythonの異なるリリースで安定していることが保証されていますが、 tp_flags 自体は限定されたAPIの一部ではありません。

バージョン 3.2 で追加.

バージョン 3.4 で変更: 返り値の型が long ではなく unsigned long になりました。

void PyType_Modified(PyTypeObject *type)

内部の検索キャッシュを、その type とすべてのサブタイプに対して無効にします。この関数は type の属性や基底クラス列を変更したあとに手動で呼び出さなければなりません。

int PyType_HasFeature(PyTypeObject *o, int feature)

型オブジェクト o に、型機能 feature が設定されている場合に真を返します。型機能は各々単一ビットのフラグで表されます。

int PyType_IS_GC(PyTypeObject *o)

型オブジェクトが o が循環参照検出をサポートしている場合に真を返します; この関数は型機能フラグ Py_TPFLAGS_HAVE_GC の設定状態をチェックします。

int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)

ab のサブタイプの場合に真を返します。

この関数は実際のサブクラスをチェックするだけです。つまり、 __subclasscheck__()b に対し呼ばれません。 issubclass() と同じチェックをするには PyObject_IsSubclass() を呼んでください。

PyObject* PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
Return value: New reference.

Generic handler for the tp_alloc slot of a type object. Use Python's default memory allocation mechanism to allocate a new instance and initialize all its contents to 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)

Return the function pointer stored in the given slot. If the result is NULL, this indicates that either the slot is NULL, or that the function was called with invalid parameters. Callers will typically cast the result pointer into the appropriate function type.

See PyType_Slot.slot for possible values of the slot argument.

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

バージョン 3.4 で追加.

Creating Heap-Allocated Types

The following functions and structs are used to create heap types.

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_base slot is used instead. If that also is NULL, the new type derives from object.

This function calls PyType_Ready() on the new type.

バージョン 3.3 で追加.

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

Equivalent to PyType_FromSpecWithBases(spec, NULL).

PyType_Spec

Structure defining a type's behavior.

const char* PyType_Spec.name

Name of the type, used to set 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

Type flags, used to set PyTypeObject.tp_flags.

If the Py_TPFLAGS_HEAPTYPE flag is not set, PyType_FromSpecWithBases() sets it automatically.

PyType_Slot *PyType_Spec.slots

Array of PyType_Slot structures. Terminated by the special slot value {0, NULL}.

PyType_Slot

Structure defining optional functionality of a type, containing a slot ID and a value pointer.

int PyType_Slot.slot

A slot ID.

Slot IDs are named like the field names of the structures PyTypeObject, PyNumberMethods, PySequenceMethods, PyMappingMethods and PyAsyncMethods with an added Py_ prefix. For example, use:

The following fields cannot be set using PyType_Spec and PyType_Slot:

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

void *PyType_Slot.pfunc

The desired value of the slot. In most cases, this is a pointer to a function.

May not be NULL.