タイプオブジェクト—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/c-api/type
移動先:案内検索

タイプオブジェクト

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)

typetp_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)

ab のサブタイプである場合は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)
型オブジェクトの tp_new スロットのジェネリックハンドラー。 タイプの tp_alloc スロットを使用して新しいインスタンスを作成します。
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)

specPy_TPFLAGS_HEAPTYPE )からヒープタイプオブジェクトを作成して返します。

bases がタプルの場合、作成されたヒープタイプには、ベースタイプとして含まれているすべてのタイプが含まれます。

basesNULLの場合、代わりに 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}で終了します。

type PyType_Slot

スロットIDと値ポインターを含む、タイプのオプション機能を定義する構造。

int PyType_Slot.slot

スロットID。

スロットIDは、構造体 PyTypeObjectPyNumberMethodsPySequenceMethodsPyMappingMethodsPyAsyncMethods のフィールド名と同じように名前が付けられます。 Py_プレフィックスが追加されています。 たとえば、次を使用します。

PyType_Spec およびPyType_Slotを使用して次のフィールドを設定することはできません。

一部のプラットフォームでは、Py_tp_basesまたはPy_tp_baseの設定に問題がある場合があります。 問題を回避するには、代わりにPyType_FromSpecWithBases()bases 引数を使用してください。

void *PyType_Slot.pfunc

スロットの望ましい値。 ほとんどの場合、これは関数へのポインターです。

NULLではない可能性があります。