إنشاء مثيل من نوع امتداد Python في ج
-
24-09-2019 - |
سؤال
أنا أكتب بسيطة Vector
التنفيذ كوحدة تمديد Python في C والتي تبدو في الغالب مثل هذا:
typedef struct {
PyObject_HEAD
double x;
double y;
} Vector;
static PyTypeObject Vector_Type = {
...
};
من السهل جدًا إنشاء مثيلات من Vector
أثناء الاتصال من بيثون ، لكنني بحاجة إلى إنشاء ملف Vector
مثيل في نفس وحدة التمديد. نظرت إلى الوثائق لكنني لم أجد إجابة واضحة. ما هي الطريقة المثلى لعمل هذا؟
المحلول
أبسط هو استدعاء كائن النوع الذي أنشأته ، على سبيل المثال pyobject_callfunction - لا تدع الاسم يخدعك ، فهو يتيح لك الاتصال أي قابلة للاستدعاء ، ليس مجرد وظيفة.
إذا لم يكن لديك إشارة إلى كائن النوع الخاص بك متاح بشكل مريح كملف static
عالمي إلى وحدة C ، يمكنك استردادها بطرق مختلفة ، بالطبع (على سبيل المثال ، من كائن الوحدة النمطية مع أ pyobject_getattrstring). لكن التمسك بذلك PyObject*
الى static
متغير C على مستوى الوحدة هو أبسط وأكثر ملاءمة.
لا تنتمي إلى StackOverflow