سؤال

أنا أكتب بسيطة 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 على مستوى الوحدة هو أبسط وأكثر ملاءمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top