簡體   English   中英

Python C API:使用C擴展中的屬性裝飾器

[英]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_getsetPyGetSetDef結構。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM