Python C API : Using the property decorator from a C extension

标签 python python-c-api

我正在用 C 编写一个 python 模块,它提供一个类,包装一个 C API。 C API 有一些基本的访问器方法,我想将它们作为 python 类中的一个属性呈现。例如,假设我有:

int libspam_get_eggs(spam_t *spam, int *eggs);
int libspam_set_eggs(spam_t *spam, int eggs);

我知道如何创建类 CSpam 并向其添加 get_eggs() 和 set_eggs() 方法,但我想将 eggs 作为属性呈现。为了解决这个问题,我可以在执行以下操作的对象周围放置一个 python 包装器:

class Spam(CSpam):
    eggs = property(CSpam.get_eggs, CSpam.set_eggs)

但如果可能的话,我想在 C API 中做所有事情。有办法做到这一点吗?

最佳答案

您正在寻找 PyTypeObject.tp_getsetPyGetSetDef 结构。

getter 和 setter 函数的签名应该匹配

PyObject *libspam_get_eggs(PyObject *self, void *closure);
int libspam_set_eggs(PyObject *self, PyObject *value, void *closure);

其中 closure 是在 PyGetSetDef 上设置的 void*

关于Python C API : Using the property decorator from a C extension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309983/

相关文章:

python - 如何将 Python bool 对象转换为 C int(或 C++ bool 值)(Python C API)

python - 使用调试 Python 安装在 Windows 上构建 Python-C-Extension

python - 脚本是否已实现,请检查我是初学者

python - 使用python-c-api时调试PyObject泄漏

python - 如何从多维缓冲区初始化 NumPy 数组?

python - 更正扩展模块中的循环垃圾收集

python - psutil.test() 返回无。如何将其输出写入文件?

python - Appengine - 是否可以仅使用没有模型名称的键字符串来获取实体?

python - 如何使用python sdk下载交付内容(视频)?

python 元组返回 datetime.datetime