นี่คือตัวอย่างที่มีการห่อและฝังอ็อบเจ็กต์ Python อย่างง่าย เรากำลังใช้ .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')
เราคอมไพล์ด้วย cython pycls.pyx (ใช้ --cplus สำหรับ c++) เพื่อสร้างไฟล์ .c และ .h ที่มีการประกาศซอร์สและฟังก์ชันตามลำดับ ตอนนี้เราสร้างไฟล์ main.c ที่เริ่มต้น Python และเราพร้อมที่จะเรียกใช้ฟังก์ชันเหล่านี้ -
#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 ของ 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]
ทั้งหมดนี้ทำได้โดยใช้ Cython ร่วมกับคีย์เวิร์ดสาธารณะที่สร้างไฟล์ส่วนหัว .h เราสามารถคอมไพล์โมดูลหลามด้วย Cython และสร้างส่วนหัว/จัดการสำเร็จรูปเพิ่มเติมได้ด้วยตัวเอง