我有一个C扩展,它接收和接受PyCapsule对象
在我的python包装器中,如何检查python对象是否为PyCapsule类型的对象
>>> # My C extension
>>> foo = Foo()
>>> capsule = foo.to_capsule() # returns a PyCapsule object from the C extension
>>> capsule
<capsule object "foo" at 0xf707df08>
>>> type(capsule)
<class 'PyCapsule'>
isinstance(capsule, PyCapsule)
NameError: name 'PyCapsule' is not defined
我想写一个函数,比如:
def push_capsule(capsule):
# check that the `capsule` is of type PyCapsule
# c_extension.push_capsule(capsule)
正如您所指出的,PyCapsule类型不能直接从Python访问。要在没有严重的ctypes依赖性的情况下检测它(在DavidW接受的答案中),我将执行以下操作:
这有点乱,但你可以从
ctypes
得到它:从地址创建
py_object
看起来需要一个包含PyObject*
的地址,而不是PyObject*
本身,因此需要额外的间接层一般来说,首先检查您的API是否提供了某种方式来访问要引用的类
如果没有,则从虚拟实例恢复该类
相关问题 更多 >
编程相关推荐