Python C API:使用C扩展中的属性装饰器

时间:2016-03-30 13:14:59

标签: 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()方法,但我想将鸡蛋作为属性来代替。为了解决这个问题,我可以在对象周围放置一个python包装器:

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

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

1 个答案:

答案 0 :(得分:3)

您正在寻找PyTypeObject.tp_getsetPyGetSetDef结构。

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

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

其中closurevoid*上设置的PyGetSetDef

相关问题