سؤال

أنا أقوم بتطوير وحدة النمط للبيثون باستخدام C API. كيف يمكنني إنشاء متغير يُنظر إليه على أنه عالمي من بيثون؟

على سبيل المثال ، إذا كانت الوحدة النمطية الخاصة بي module, ، أريد إنشاء متغير g هذا يفعل هذه الوظيفة:

import module
print module.g

خاصه، g هو عدد صحيح.

حل من أليكس مارتيلي

PyObject *m = Py_InitModule("mymodule", mymoduleMethods);
PyObject *v = PyLong_FromLong((long) 23);

PyObject_SetAttrString(m, "g", v);
Py_DECREF(v);
هل كانت مفيدة؟

المحلول

يمكنك استخدام pyobject_setattrstring في روتين تهيئة الوحدة النمطية ، مع الوسيطة الأولى o يجري (الممثلون ل (PyObject*) من) الوحدة النمطية الخاصة بك ، الحجة الثانية attr_name كونه "G" ، الحجة الثالثة v كونه متغير

PyObject *v = PyLong_FromLong((long) 23);

(أو أي قيمة أخرى بالطبع ، 23 هو مجرد مثال!-).

تذكر أن تكرم v عقب ذلك مباشرة.

هناك طرق أخرى ، لكن هذه الطريقة بسيطة وعامة.

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