캡슐¶
이 객체 사용에 대한 자세한 정보는 Providing a C API for an Extension Module를 참조하십시오.
버전 3.1에 추가.
-
PyCapsule
¶ 이
PyObject
의 서브 형은 불투명한 값을 나타내며, 파이썬 코드를 통해 다른 C 코드로 불투명한 값(void*
포인터로)을 전달해야 하는 C 확장 모듈에 유용합니다. 이것은 한 모듈에서 정의된 C 함수 포인터를 다른 모듈에서 사용할 수 있게 만드는 데 종종 사용되므로, 일반 임포트 메커니즘을 사용하여 동적으로 로드된 모듈에 정의된 C API에 액세스할 수 있습니다.
-
PyCapsule_Destructor
¶ 캡슐에 대한 파괴자(destructor) 콜백 형. 이렇게 정의됩니다:
typedef void (*PyCapsule_Destructor)(PyObject *);
PyCapsule_Destructor 콜백의 의미는
PyCapsule_New()
를 참조하십시오.
-
PyObject*
PyCapsule_New
(void *pointer, const char *name, PyCapsule_Destructor destructor)¶ - Return value: New reference.
Create a
PyCapsule
encapsulating the pointer. The pointer argument may not beNULL
.On failure, set an exception and return
NULL
.The name string may either be
NULL
or a pointer to a valid C string. If non-NULL
, this string must outlive the capsule. (Though it is permitted to free it inside the destructor.)If the destructor argument is not
NULL
, it will be called with the capsule as its argument when it is destroyed.이 캡슐을 모듈의 어트리뷰트로 저장하려면, name을
modulename.attributename
로 지정해야 합니다. 이렇게 하면 다른 모듈이PyCapsule_Import()
를 사용하여 캡슐을 임포트 할 수 있습니다.
-
void*
PyCapsule_GetPointer
(PyObject *capsule, const char *name)¶ Retrieve the pointer stored in the capsule. On failure, set an exception and return
NULL
.The name parameter must compare exactly to the name stored in the capsule. If the name stored in the capsule is
NULL
, the name passed in must also beNULL
. Python uses the C functionstrcmp()
to compare capsule names.
-
PyCapsule_Destructor
PyCapsule_GetDestructor
(PyObject *capsule)¶ Return the current destructor stored in the capsule. On failure, set an exception and return
NULL
.It is legal for a capsule to have a
NULL
destructor. This makes aNULL
return code somewhat ambiguous; usePyCapsule_IsValid()
orPyErr_Occurred()
to disambiguate.
-
void*
PyCapsule_GetContext
(PyObject *capsule)¶ Return the current context stored in the capsule. On failure, set an exception and return
NULL
.It is legal for a capsule to have a
NULL
context. This makes aNULL
return code somewhat ambiguous; usePyCapsule_IsValid()
orPyErr_Occurred()
to disambiguate.
-
const char*
PyCapsule_GetName
(PyObject *capsule)¶ Return the current name stored in the capsule. On failure, set an exception and return
NULL
.It is legal for a capsule to have a
NULL
name. This makes aNULL
return code somewhat ambiguous; usePyCapsule_IsValid()
orPyErr_Occurred()
to disambiguate.
-
void*
PyCapsule_Import
(const char *name, int no_block)¶ 모듈의 캡슐 어트리뷰트에서 C 객체에 대한 포인터를 임포트 합니다. name 매개 변수는
module.attribute
처럼 어트리뷰트의 전체 이름을 지정해야 합니다. 캡슐에 저장된 name은, 이 문자열과 정확히 일치해야 합니다. no_block이 참이면, 블록하지 않고 모듈을 임포트 합니다 (PyImport_ImportModuleNoBlock()
를 사용해서). no_block이 거짓이면, 모듈을 평범하게 임포트 합니다 (PyImport_ImportModule()
을 사용해서).Return the capsule’s internal pointer on success. On failure, set an exception and return
NULL
.
-
int
PyCapsule_IsValid
(PyObject *capsule, const char *name)¶ Determines whether or not capsule is a valid capsule. A valid capsule is non-
NULL
, passesPyCapsule_CheckExact()
, has a non-NULL
pointer stored in it, and its internal name matches the name parameter. (SeePyCapsule_GetPointer()
for information on how capsule names are compared.)즉,
PyCapsule_IsValid()
가 참값을 반환하면, 모든 접근자(PyCapsule_Get()
으로 시작하는 모든 함수)에 대한 호출이 성공함이 보장됩니다.객체가 유효하고 전달된 이름과 일치하면 0이 아닌 값을 반환합니다. 그렇지 않으면
0
을 반환합니다. 이 함수는 실패하지 않습니다.
-
int
PyCapsule_SetContext
(PyObject *capsule, void *context)¶ capsule 내부의 컨텍스트 포인터를 context로 설정합니다.
성공하면
0
을 반환합니다. 실패하면 0이 아닌 값을 반환하고 예외를 설정합니다.
-
int
PyCapsule_SetDestructor
(PyObject *capsule, PyCapsule_Destructor destructor)¶ capsule 내부의 파괴자를 destructor로 설정합니다.
성공하면
0
을 반환합니다. 실패하면 0이 아닌 값을 반환하고 예외를 설정합니다.