カプセル¶
これらのオブジェクトの使い方については 拡張モジュールに C API を提供する を参照してください。
Added in version 3.1.
-
type PyCapsule¶
PyObjectのこのサブタイプは不透明な値を表します。 C 拡張モジュールから Python のコードを経由して別の C コードへ、不透明な値を void* ポインタとして渡すのに役立ちます。 あるモジュールで定義した C 関数ポインタを別のモジュールに公開するためによく使われます。 これにより、通常のインポートの仕組みを使って、動的にロードしたモジュールの C API にアクセスできます。
-
PyTypeObject PyCapsule_Type¶
- 次に属します: Stable ABI.
カプセルオブジェクトに対応する型オブジェクトです。 Python レイヤの
types.CapsuleTypeと同じオブジェクトです。
-
type PyCapsule_Destructor¶
- 次に属します: Stable ABI.
カプセルに対するデストラクタコールバック型. 次のように定義されます:
typedef void (*PyCapsule_Destructor)(PyObject *);
PyCapsule_Destructor コールバックの動作については
PyCapsule_New()を参照してください。
-
PyObject *PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI. Thread safety: Atomic.
pointer を格納する
PyCapsuleを作成します。 pointer 引数はNULLであってはなりません。失敗した場合、例外を設定して
NULLを返します。name 文字列は
NULLか、有効なC文字列へのポインタです。NULLで無い場合、この文字列は少なくともカプセルより長く生存する必要があります。(destructor の中で解放することは許可されています)destructor が
NULLで無い場合、カプセルが削除されるときにそのカプセルを引数として呼び出されます。このカプセルがモジュールの属性として保存される場合、 name は
modulename.attributenameと指定されるべきです。こうすると、他のモジュールがそのカプセルをPyCapsule_Import()でインポートすることができます。
-
void *PyCapsule_GetPointer(PyObject *capsule, const char *name)¶
- 次に属します: Stable ABI. Thread safety: Safe to call without external synchronization on distinct objects.
カプセルに保存されている pointer を取り出します。失敗した場合は例外を設定して
NULLを返します。name 引数は、カプセルに格納されている名前と完全に一致しなければなりません。 カプセルに格納されている名前が
NULLなら、渡す name もNULLでなければなりません。 Python はカプセル名の比較に C 関数strcmp()を使います。
-
PyCapsule_Destructor PyCapsule_GetDestructor(PyObject *capsule)¶
- 次に属します: Stable ABI. Thread safety: Safe to call without external synchronization on distinct objects.
カプセルに保存されている現在のデストラクタを返します。失敗した場合、例外を設定して
NULLを返します。カプセルは
NULLをデストラクタとして持つことができます。従って、戻り値のNULLがエラーを指してない可能性があります。PyCapsule_IsValid()かPyErr_Occurred()を利用して確認してください。
-
void *PyCapsule_GetContext(PyObject *capsule)¶
- 次に属します: Stable ABI. Thread safety: Safe to call without external synchronization on distinct objects.
カプセルに保存されている現在のコンテキスト(context)を返します。失敗した場合、例外を設定して
NULLを返します。カプセルは
NULLをコンテキストとして持つことができます。従って、戻り値のNULLがエラーを指してない可能性があります。PyCapsule_IsValid()かPyErr_Occurred()を利用して確認してください。
-
const char *PyCapsule_GetName(PyObject *capsule)¶
- 次に属します: Stable ABI. Thread safety: Safe to call without external synchronization on distinct objects.
カプセルに保存されている現在の name を返します。失敗した場合、例外を設定して
NULLを返します。カプセルは
NULLを name として持つことができます。従って、戻り値のNULLがエラーを指してない可能性があります。PyCapsule_IsValid()かPyErr_Occurred()を利用して確認してください。
-
void *PyCapsule_Import(const char *name, int no_block)¶
- 次に属します: Stable ABI. Thread safety: Safe to call from multiple threads with external synchronization only.
Import a pointer to a C object from a capsule attribute in a module. The name parameter should specify the full name to the attribute, as in
package.module.attribute. Modules are imported if needed, other components are looked up as attributes. The name stored in the capsule must match this string exactly.成功すると、カプセル内部の pointer を返します。 失敗すると例外を設定して
NULLを返します。バージョン 3.3 で変更: no_block は効果を持たなくなりました。
バージョン 3.16 で変更: Submodules are now imported if needed.
-
int PyCapsule_IsValid(PyObject *capsule, const char *name)¶
- 次に属します: Stable ABI. Thread safety: Safe to call without external synchronization on distinct objects.
capsule が有効なカプセルであるかどうかをチェックします。有効な capsule は、非
NULLで、PyCapsule_CheckExact()をパスし、非NULLなポインタを格納していて、内部の name が引数 name とマッチします。 (name の比較方法についてはPyCapsule_GetPointer()を参照)言い換えると、
PyCapsule_IsValid()が真を返した場合、どのアクセサ (PyCapsule_Getで始まる関数) を呼び出しても成功することが保証されます。オブジェクトが有効で name がマッチした場合に非
0を、それ以外の場合に0を返します。この関数は絶対に失敗しません。
-
int PyCapsule_SetContext(PyObject *capsule, void *context)¶
- 次に属します: Stable ABI. Thread safety: Safe to call without external synchronization on distinct objects.
capsule 内部のコンテキストポインタを context に設定します。
成功したら
0を、失敗したら例外を設定して非0を返します。
-
int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor)¶
- 次に属します: Stable ABI. Thread safety: Safe to call without external synchronization on distinct objects.
capsule 内部のデストラクタを destructor に設定します。
成功したら
0を、失敗したら例外を設定して非0を返します。
-
int PyCapsule_SetName(PyObject *capsule, const char *name)¶
- 次に属します: Stable ABI. Thread safety: Safe to call without external synchronization on distinct objects.
capsule 内部の name を name に設定します。name が非
NULLのとき、それは capsule よりも長い寿命を持つ必要があります。もしすでに capsule に非NULLの name が保存されていた場合、それに対する解放は行われません。成功したら
0を、失敗したら例外を設定して非0を返します。
-
int PyCapsule_SetPointer(PyObject *capsule, void *pointer)¶
- 次に属します: Stable ABI. Thread safety: Safe to call without external synchronization on distinct objects.
capsule 内部のポインタを pointer に設定します。pointer は
NULLであってはなりません。成功したら
0を、失敗したら例外を設定して非0を返します。