前のトピックへ

オブジェクト実装サポート (object implementation support)

次のトピックへ

共通のオブジェクト構造体 (common object structure)

このページ

オブジェクトをヒープ上にメモリ確保する

PyObject* _PyObject_New(PyTypeObject *type)
Return value: New reference.
PyVarObject* _PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Return value: New reference.

バージョン 2.5 で変更: この関数は以前は size の型に int を利用していました。 この変更により、 64bit システムを正しくサポートするには修正が必要になります。

void _PyObject_Del(PyObject *op)
PyObject* PyObject_Init(PyObject *op, PyTypeObject *type)
Return value: Borrowed reference.

新たにメモリ確保されたオブジェクト op に対し、型と初期状態での参照 (initial reference) を初期化します。初期化されたオブジェクトを返します。 type からそのオブジェクトが循環参照ガベージ検出の機能を有する場合、検出機構が監視対象とするオブジェクトのセットに追加されます。オブジェクトの他のフィールドには影響を及ぼしません。

PyVarObject* PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Return value: Borrowed reference.

PyObject_Init() の全ての処理を行い、可変サイズオブジェクトの場合には長さ情報も初期化します。

バージョン 2.5 で変更: この関数は以前は size の型に int を利用していました。 この変更により、 64bit システムを正しくサポートするには修正が必要になります。

TYPE* PyObject_New(TYPE, PyTypeObject *type)
Return value: New reference.

C 構造体型 TYPE と Python 型オブジェクト type を使って新たな Python オブジェクトをメモリ確保します。 Python オブジェクトヘッダで定義されていないフィールドは初期化されません; オブジェクトの参照カウントは 1 になります。メモリ確保のサイズは型オブジェクトの tp_basicsize で決定します。

TYPE* PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
Return value: New reference.

C 構造体型 TYPE と Python 型オブジェクト type を使って新たな Python オブジェクトをメモリ確保します。 Python オブジェクトヘッダで定義されていないフィールドは初期化されません。確保されたメモリは、 TYPE 構造体に加え、vartype の tp_itemsize フィールドで指定されているサイズ中の size フィールドを収容できます。この関数は、例えばタプルのように生成時にサイズを決定できるオブジェクトを実装する際に便利です。一連の複数のフィールドに対するアロケーション操作を一つにして埋め込むと、アロケーション回数が減り、メモリ管理の処理効率が向上します。

バージョン 2.5 で変更: この関数は以前は size の型に int を利用していました。 この変更により、 64bit システムを正しくサポートするには修正が必要になります。

void PyObject_Del(PyObject *op)

PyObject_New()PyObject_NewVar() で確保されたメモリを解放します。この関数は、通常オブジェクトの型に指定されている tp_dealloc ハンドラ内で呼び出します。この関数を呼び出した後では、オブジェクトのメモリ領域はもはや有効な Python オブジェクトを表現してはいないので、オブジェクトのフィールドに対してアクセスしてはなりません。

PyObject* Py_InitModule(char *name, PyMethodDef *methods)
Return value: Borrowed reference.

name と関数のテーブルに基づいて新たなモジュールオブジェクトを生成し、生成されたモジュールオブジェクトを返します。

バージョン 2.3 で変更: 以前のバージョンの Python では、 methods 引数の値として NULL をサポートしていませんでした.

PyObject* Py_InitModule3(char *name, PyMethodDef *methods, char *doc)
Return value: Borrowed reference.

name と関数のテーブルに基づいて新たなモジュールオブジェクトを生成し、生成されたモジュールオブジェクトを返します。 docNULL でない場合、モジュールの docstring として使われます。

バージョン 2.3 で変更: 以前のバージョンの Python では、 methods 引数の値として NULL をサポートしていませんでした.

PyObject* Py_InitModule4(char *name, PyMethodDef *methods, char *doc, PyObject *self, int apiver)
Return value: Borrowed reference.

name と関数のテーブルに基づいて新たなモジュールオブジェクトを生成し、生成されたモジュールオブジェクトを返します。 docNULL でない場合、モジュールの docstring として使われます。 selfNULL でない場合、モジュール内の各関数の第一引数として渡されます (NULL の時には第一引数も NULL になります)。 (この関数は実験的な機能のために追加されたもので、現在の Python のバージョンで使われてはいないはずです。) apiver に渡してよい値は、 PYTHON_API_VERSION で定義されている定数だけです。

ノート

この関数のほとんどの用途は、代わりに Py_InitModule3() を使えるはずです; 本当にこの関数を使いたいときにだけ利用してください

バージョン 2.3 で変更: 以前のバージョンの Python では、 methods 引数の値として NULL をサポートしていませんでした.

PyObject _Py_NoneStruct

Python からは None に見えるオブジェクトです。この値へのアクセスは、このオブジェクトへのポインタを評価する Py_None マクロを使わねばなりません。