Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

मौजूदा पायथन वर्ग में सी विधि कैसे संलग्न करें?


यह विधि दिखाती है कि C एक्सटेंशन मॉड्यूल से एक नए पायथन वर्ग को कैसे परिभाषित किया जाए। कक्षा के तरीकों को सी में लागू किया गया है, लेकिन कक्षा को अभी भी पाइथन से तत्काल, उप-वर्गीकृत और विस्तारित किया जा सकता है। विरासत के साथ एक ही तकनीक का उपयोग मौजूदा पायथन वर्ग को सी में लिखे गए तरीकों के साथ विस्तारित करने के लिए भी किया जा सकता है। इस तकनीक में, PyClass_New के पहले तर्क को NULL के रूप में पारित किया जाता है, यह दर्शाता है कि नई कक्षा में कोई आधार वर्ग नहीं है। फिर हम इस स्थान पर बेस क्लास के टपल को पास करते हैं, और हमें सामान्य पायथन इनहेरिटेंस व्यवहार मिलेगा, भले ही हमारी नई क्लास को पायथन सोर्स कोड के बजाय सी एक्सटेंशन में बनाया जा रहा हो।

उदाहरण

#include <Python.h>
static PyObject* Foo_init(PyObject *self, PyObject *args)
{
    printf("Foo._ _init_ _ called\n");
    Py_INCREF(Py_None);
    return Py_None;
}
static PyObject* Foo_doSomething(PyObject *self, PyObject *args)
{
    printf("Foo.doSomething called\n");
    Py_INCREF(Py_None);
    return Py_None;
}
static PyMethodDef FooMethods[] =
{
    {"_ _init_ _", Foo_init, METH_VARARGS, "doc string"},
    {"doSomething", Foo_doSomething, METH_VARARGS, "doc string"},
    {0, 0},
};
static PyMethodDef ModuleMethods[] = { {0, 0} };
#ifdef _ _cplusplus
extern "C"
#endif
void initFoo(  )
{
    PyMethodDef *def;
    /* create new module and class objects */
    PyObject *module = Py_InitModule("Foo", ModuleMethods);
    PyObject *moduleDict = PyModule_GetDict(module);
    PyObject *classDict = PyDict_New(  );
    PyObject *className = PyString_FromString("Foo");
    PyObject *fooClass = PyClass_New(NULL, classDict, className);
    PyDict_SetItemString(moduleDict, "Foo", fooClass);
    Py_DECREF(classDict);
    Py_DECREF(className);
    Py_DECREF(fooClass);
    /* add methods to class */
    for (def = FooMethods; def->ml_name != NULL; def++) {
        PyObject *func = PyCFunction_New(def, NULL);
        PyObject *method = PyMethod_New(func, NULL, fooClass);
        PyDict_SetItemString(classDict, def->ml_name, method);
        Py_DECREF(func);
        Py_DECREF(method);
    }
}

  1. सी # में कक्षा की विधि को कैसे कॉल करें

    एक विधि को कॉल करने के लिए, वस्तु के नाम के बाद विधि के नाम का उपयोग करें, उदाहरण के लिए, - obj1. Display(); मान लें कि वर्ग का नाम ApplicationOne है, इसलिए विधि को कॉल करने के लिए - ApplicationOne one = new ApplicationOne(); //calling the displayMax method ret = one.displayMax(a, b); को कॉल करना

  1. पायथन में आरओसी वक्र कैसे प्लॉट करें?

    आरओसी - रिसीवर ऑपरेटिंग विशेषताओं (आरओसी) वक्र। metrics.plot_roc_curve(clf, X_test, y_test) विधि का उपयोग करके, हम ROC कर्व बना सकते हैं। कदम एक यादृच्छिक एन-क्लास वर्गीकरण समस्या उत्पन्न करें। यह शुरू में ``n_informative``-आयामी हाइपरक्यूब के शीर्षों के बारे में सामान्य रूप से वितरित (std=1) बि

  1. मैं एक पायथन नेमस्पेस कैसे बनाऊं?

    हर पैकेज, मॉड्यूल, क्लास, फंक्शन और मेथड फंक्शन में एक नेमस्पेस होता है, जिसमें वेरिएबल नामों का समाधान किया जाता है। जब किसी फ़ंक्शन, मॉड्यूल या पैकेज का मूल्यांकन किया जाता है (अर्थात, निष्पादन शुरू होता है), एक नाम स्थान बनाया जाता है। इसलिए यदि आप एक नाम स्थान बनाना चाहते हैं, तो आपको बस एक फ़ंक