2016-03-30 19 views
1

özellik dekoratörünü kullanarak C dilinde bir C API'sini saran bir sınıf sağlayan bir python modülü yazıyorum. C API'sinin, python sınıfında bir özellik olarak sunmak istediğim bazı temel erişim yöntemleri vardır.Python C API: Bir C uzantısından

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

ben buna get_eggs() ve set_eggs() yöntemleri sınıf CSpam oluşturmak ve nasıl ekleneceğini biliyorum ama bunun yerine bir özelliği olarak yumurta sunmak istiyorum: Örneğin, ben derler.

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

Ama mümkünse C API her şeyi yapmak istiyorum: Bu sorunu çözmek için, ben yapar nesne etrafında bir piton sarmalayıcı koyabilirim. Bunu yapmanın bir yolu var mı?

cevap

2

PyTypeObject.tp_getset ve PyGetSetDef yapısını arıyorsunuz.

closurePyGetSetDef üzerinde void* kümesidir nerede

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

aynı olmalıdır alıcı ve ayarlayıcı fonksiyonlarının imzası.