タイプオブジェクト
- type PyTypeObject
- 組み込み型を記述するために使用されるオブジェクトのC構造体。
- PyObject *PyType_Type
- これは、型オブジェクトの型オブジェクトです。 Pythonレイヤーの type と同じオブジェクトです。
- int PyType_Check(PyObject *o)
- オブジェクト o が型オブジェクトである場合、trueを返します。これには、標準の型オブジェクトから派生した型のインスタンスが含まれます。 それ以外の場合はすべてfalseを返します。
- int PyType_CheckExact(PyObject *o)
- オブジェクト o が型オブジェクトであるが、標準型オブジェクトのサブタイプではない場合はtrueを返します。 それ以外の場合はすべてfalseを返します。
- 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)
- タイプとそのすべてのサブタイプの内部ルックアップキャッシュを無効にします。 この関数は、タイプの属性または基本クラスを手動で変更した後に呼び出す必要があります。
- int PyType_HasFeature(PyTypeObject *o, int feature)
- タイプオブジェクト o が機能機能を設定する場合はtrueを返します。 タイプ機能は、シングルビットフラグで示されます。
- int PyType_IS_GC(PyTypeObject *o)
- タイプオブジェクトに循環検出器のサポートが含まれている場合はtrueを返します。 これは、タイプフラグ Py_TPFLAGS_HAVE_GC をテストします。
- int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)
a が b のサブタイプである場合はtrueを返します。
この関数は実際のサブタイプのみをチェックします。つまり、 __ subclasscheck __()は b では呼び出されません。 PyObject_IsSubclass()を呼び出して、 issubclass()と同じチェックを行います。
- PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
- 型オブジェクトの tp_alloc スロットのジェネリックハンドラー。 Pythonのデフォルトのメモリ割り当てメカニズムを使用して、新しいインスタンスを割り当て、そのすべてのコンテンツを
NULL
に初期化します。
- PyObject *PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
- int PyType_Ready(PyTypeObject *type)
- 型オブジェクトを完成させます。 これは、初期化を完了するためにすべての型オブジェクトで呼び出す必要があります。 この関数は、型の基本クラスから継承されたスロットを追加する役割を果たします。 成功した場合は
0
を返すか、-1
を返してエラーの場合は例外を設定します。
- void *PyType_GetSlot(PyTypeObject *type, int slot)
指定されたスロットに格納されている関数ポインタを返します。 結果が
NULL
の場合、これは、スロットがNULL
であるか、関数が無効なパラメーターで呼び出されたことを示しています。 呼び出し元は通常、結果ポインターを適切な関数型にキャストします。slot 引数の可能な値については、
PyType_Slot.slot
を参照してください。type がヒープタイプでない場合は例外が発生します。
バージョン3.4の新機能。
ヒープ割り当て型の作成
次の関数と構造体を使用して、ヒープタイプを作成します。
- PyObject *PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
spec ( Py_TPFLAGS_HEAPTYPE )からヒープタイプオブジェクトを作成して返します。
bases がタプルの場合、作成されたヒープタイプには、ベースタイプとして含まれているすべてのタイプが含まれます。
bases が
NULL
の場合、代わりに Py_tp_bases スロットが使用されます。 それがNULL
でもある場合は、代わりに Py_tp_base スロットが使用されます。 それもNULL
の場合、新しいタイプはオブジェクトから派生します。この関数は、新しいタイプで PyType_Ready()を呼び出します。
バージョン3.3の新機能。
- PyObject *PyType_FromSpec(PyType_Spec *spec)
PyType_FromSpecWithBases(spec, NULL)
と同等です。
- type PyType_Spec
タイプの動作を定義する構造。
- const char *PyType_Spec.name
PyTypeObject.tp_name の設定に使用されるタイプの名前。
- int PyType_Spec.basicsize
- int PyType_Spec.itemsize
PyTypeObject.tp_basicsize および PyTypeObject.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_Spec.name
- type PyType_Slot
スロットIDと値ポインターを含む、タイプのオプション機能を定義する構造。
- int PyType_Slot.slot
スロットID。
スロットIDは、構造体 PyTypeObject 、 PyNumberMethods 、 PySequenceMethods 、 PyMappingMethods 、 PyAsyncMethods のフィールド名と同じように名前が付けられます。
Py_
プレフィックスが追加されています。 たとえば、次を使用します。Py_tp_dealloc
は、 PyTypeObject.tp_dealloc を設定しますPy_nb_add
は、 PyNumberMethods.nb_add を設定しますPy_sq_length
で PySequenceMethods.sq_length を設定します
PyType_Spec および
PyType_Slot
を使用して次のフィールドを設定することはできません。tp_print
一部のプラットフォームでは、
Py_tp_bases
またはPy_tp_base
の設定に問題がある場合があります。 問題を回避するには、代わりにPyType_FromSpecWithBases()
の bases 引数を使用してください。
- void *PyType_Slot.pfunc
スロットの望ましい値。 ほとんどの場合、これは関数へのポインターです。
NULL
ではない可能性があります。
- int PyType_Slot.slot