[英]Python C API: Using the property decorator from a C extension
我在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()方法,但我想將egg作為屬性來代替。 為了解決這個問題,我可以在對象周圍放置一個python包裝器:
class Spam(CSpam):
eggs = property(CSpam.get_eggs, CSpam.set_eggs)
但是如果可能的話,我想在C API中做所有事情。 有沒有辦法做到這一點?
您正在尋找PyTypeObject.tp_getset
和PyGetSetDef
結構。
getter和setter函數的簽名應該匹配
PyObject *libspam_get_eggs(PyObject *self, void *closure);
int libspam_set_eggs(PyObject *self, PyObject *value, void *closure);
其中, closure
是在PyGetSetDef
上設置的void*
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.