2009-12-23 12 views
8

मैं पायथन के सी एपीआई का उपयोग करमैं सीपीआई के माध्यम से एक पायथन कक्षा में स्थिर चर कैसे बना सकता हूं?

class Foo(object): 
    bar = 1 

के बराबर करना चाहते हैं। दूसरे शब्दों में, मैं एक पाइथन क्लास बनाना चाहता हूं जिसमें सी

का उपयोग करके एक स्थिर चर है, मैं यह कैसे कर सकता हूं?

उत्तर

5

इसे मिला! यह केवल ऑब्जेक्ट के tp_dict तत्व को सेट करने और प्रत्येक स्थिर चर के लिए प्रविष्टियों को जोड़ने के लिए एक मामला है। निम्नलिखित सी कोड उपरोक्त पायथन कोड के समान स्थिर चर बनाता है:

PyTypeObject type; 
// ...other initialisation... 
type.tp_dict = PyDict_New(); 
PyDict_SetItemString(type.tp_dict, "bar", PyInt_FromLong(1)); 
2

आप उचित स्रोतों के साथ Py_CompileString पर उस स्रोत कोड को पारित कर सकते हैं।

यदि आपके पास पहले से ही कक्षा है तो आप PyObject_SetAttr का उपयोग कर सकते हैं।

+0

सुझाव के लिए धन्यवाद! ऐसा लगता है कि ऐसा करने के लिए यह एक चौराहे का तरीका है - क्या कक्षाओं के लिए PyModule_AddIntConstant के समान कुछ भी है? – Vil

+0

क्षमा करें, मैंने केवल देखा है कि आपने अपना उत्तर अपडेट किया है। मदद के लिए एक बार फिर से धन्यवाद। मैंने PyObject_SetAttr का उपयोग करने का प्रयास किया है, लेकिन जब भी मैं इसे कॉल करता हूं तो मुझे कोई त्रुटि नहीं है "संदेश में अंतर्निहित/एक्सटेंशन प्रकार एक्स के गुण सेट नहीं कर सकते हैं" (जहां एक्स मेरा प्रकार का नाम है)। क्या मैं कुछ गलत कर रहा हूं, या यह टाइप ऑब्जेक्ट्स के साथ काम नहीं करता है? – Vil

+0

आपको अपना कोड पेस्ट करना चाहिए? – joeforker

संबंधित मुद्दे