यहां एक उदाहरण दिया गया है जिसमें एक साधारण पायथन ऑब्जेक्ट लपेटा और एम्बेड किया गया है। हम इसके लिए .c का उपयोग कर रहे हैं, c++ के समान चरण हैं -
class PyClass(object): def __init__(self): self.data = [] def add(self, val): self.data.append(val) def __str__(self): return "Data: " + str(self.data) cdef public object createPyClass(): return PyClass() cdef public void addData(object p, int val): p.add(val) cdef public char* printCls(object p): return bytes(str(p), encoding = 'utf-8')
हम क्रमशः स्रोत और फ़ंक्शन घोषणाओं वाली .c और .h फ़ाइल उत्पन्न करने के लिए cython pycls.pyx (c++ के लिए --cplus का उपयोग करें) के साथ संकलित करते हैं। अब हम एक main.c फ़ाइल बनाते हैं जो पायथन को शुरू करती है और हम इन कार्यों को कॉल करने के लिए तैयार हैं -
#include "Python.h" // Python.h always gets included first. #include "pycls.h" // Include your header file. int main(int argc, char *argv[]){ Py_Initialize(); // initialize Python PyInit_pycls(); // initialize module (initpycls(); in Py2) PyObject *obj = createPyClass(); for(int i=0; i<10; i++){ addData(obj, i); } printf("%s\n", printCls(obj)); Py_Finalize(); return 0; }
इसे उचित झंडे के साथ संकलित करना (जिसे आप python3.5-config of python-config [Py2] से प्राप्त कर सकते हैं) -
gcc pycls.c main.c -L$(python3.5-config --cflags) -I$(python3.5-config --ldflags) -std=c99
हमारे निष्पादन योग्य बनाएगा जो हमारे ऑब्जेक्ट के साथ इंटरैक्ट करता है -
./a.out Data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
यह सब सार्वजनिक कीवर्ड के साथ साइथन का उपयोग करके किया गया था जो .h हेडर फ़ाइल उत्पन्न करता है। हम वैकल्पिक रूप से साइथन के साथ एक पायथन मॉड्यूल संकलित कर सकते हैं और हेडर बना सकते हैं/अतिरिक्त बॉयलरप्लेट को स्वयं संभाल सकते हैं।