型オブジェクト

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.

型オブジェクトの 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 か、関数が不正な引数で呼ばれたことを示します。通常、呼び出し側は返り値のポインタを適切な関数型にキャストします。

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.