タイプオブジェクト
- type PyTypeObject
- 組み込み型を記述するために使用されるオブジェクトのC構造体。
- PyTypeObject PyType_Type
- これは、型オブジェクトの型オブジェクトです。 Pythonレイヤーの type と同じオブジェクトです。
- int PyType_Check(PyObject *o)
- オブジェクト o が型オブジェクトである場合、標準の型オブジェクトから派生した型のインスタンスを含め、ゼロ以外を返します。 それ以外の場合はすべて0を返します。 この関数は常に成功します。
- int PyType_CheckExact(PyObject *o)
- オブジェクト o が型オブジェクトであるが、標準型オブジェクトのサブタイプではない場合は、ゼロ以外を返します。 それ以外の場合はすべて0を返します。 この関数は常に成功します。
- 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 が機能機能を設定する場合、ゼロ以外を返します。 タイプ機能は、シングルビットフラグで示されます。
- 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
を返してエラーの場合は例外を設定します。ノート
一部の基本クラスがGCプロトコルを実装し、提供されたタイプのフラグに Py_TPFLAGS_HAVE_GC が含まれていない場合、GCプロトコルはその親から自動的に実装されます。 逆に、作成される型のフラグに Py_TPFLAGS_HAVE_GC が含まれている場合は、少なくとも tp_traverse ハンドルを実装することにより、GCプロトコル自体を実装する必要があります。
- void *PyType_GetSlot(PyTypeObject *type, int slot)
指定されたスロットに格納されている関数ポインタを返します。 結果が
NULL
の場合、スロットがNULL
であるか、関数が無効なパラメーターで呼び出されたことを示しています。 呼び出し元は通常、結果ポインターを適切な関数型にキャストします。slot 引数の可能な値については、
PyType_Slot.slot
を参照してください。type がヒープタイプでない場合は例外が発生します。
バージョン3.4の新機能。
- PyObject *PyType_GetModule(PyTypeObject *type)
PyType_FromModuleAndSpec()を使用してタイプが作成されたときに、指定されたタイプに関連付けられたモジュールオブジェクトを返します。
指定されたタイプに関連付けられているモジュールがない場合は、 TypeError を設定し、
NULL
を返します。この関数は通常、メソッドが定義されているモジュールを取得するために使用されます。 このような方法では、
PyType_GetModule(Py_TYPE(self))
が意図した結果を返さない場合があることに注意してください。Py_TYPE(self)
は、目的のクラスのサブクラスである可能性があり、サブクラスは必ずしもスーパークラスと同じモジュールで定義されているとは限りません。 メソッドを定義するクラスを取得するには、 PyCMethod を参照してください。バージョン3.9の新機能。
- void *PyType_GetModuleState(PyTypeObject *type)
指定されたタイプに関連付けられているモジュールオブジェクトの状態を返します。 これは、 PyType_GetModule()の結果に対して PyModule_GetState()を呼び出すためのショートカットです。
指定されたタイプに関連付けられているモジュールがない場合は、 TypeError を設定し、
NULL
を返します。type に関連するモジュールがあるが、その状態が
NULL
の場合、例外を設定せずにNULL
を返します。バージョン3.9の新機能。
ヒープ割り当て型の作成
次の関数と構造体を使用して、ヒープタイプを作成します。
- PyObject *PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)
spec ( Py_TPFLAGS_HEAPTYPE )からヒープタイプオブジェクトを作成して返します。
bases がタプルの場合、作成されたヒープタイプには、ベースタイプとして含まれているすべてのタイプが含まれます。
bases が
NULL
の場合、代わりに Py_tp_bases スロットが使用されます。 それがNULL
でもある場合は、代わりに Py_tp_base スロットが使用されます。 それもNULL
の場合、新しいタイプはオブジェクトから派生します。module 引数を使用して、新しいクラスが定義されているモジュールを記録できます。 モジュールオブジェクトまたは
NULL
である必要があります。NULL
でない場合、モジュールは新しいタイプに関連付けられ、後で PyType_GetModule()で取得できます。 関連するモジュールはサブクラスに継承されません。 クラスごとに個別に指定する必要があります。この関数は、新しいタイプで PyType_Ready()を呼び出します。
バージョン3.9の新機能。
- PyObject *PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
PyType_FromModuleAndSpec(NULL, spec, bases)
と同等です。バージョン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_weaklistoffset ( PyMemberDef を参照)
tp_dictoffset ( PyMemberDef を参照)
tp_vectorcall_offset ( PyMemberDef を参照)
制限付きAPIでは、 PyType_Spec および
PyType_Slot
を使用して次のフィールドを設定することはできません。一部のプラットフォームでは、
Py_tp_bases
またはPy_tp_base
の設定に問題がある場合があります。 問題を回避するには、代わりにPyType_FromSpecWithBases()
の bases 引数を使用してください。バージョン3.9で変更: PyBufferProcs のスロットが無制限のAPIで設定される場合があります。
- void *PyType_Slot.pfunc
スロットの望ましい値。 ほとんどの場合、これは関数へのポインターです。
NULL
ではない可能性があります。
- int PyType_Slot.slot