কম্পিউটার

বিদ্যমান পাইথন ক্লাসে কীভাবে একটি সি পদ্ধতি সংযুক্ত করবেন?


এই পদ্ধতিটি দেখায় কিভাবে একটি সি এক্সটেনশন মডিউল থেকে একটি নতুন পাইথন ক্লাস সংজ্ঞায়িত করা যায়। ক্লাসের পদ্ধতিগুলি সি-তে প্রয়োগ করা হয়, তবে ক্লাসটি এখনও পাইথন থেকে তাত্ক্ষণিক, সাবক্লাসড এবং প্রসারিত হতে পারে। উত্তরাধিকার সহ একই কৌশলটি 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. সি# এ একটি ক্লাসের একটি পদ্ধতিকে কীভাবে কল করবেন

  2. কিভাবে পাইথনে ROC বক্ররেখা প্লট করবেন?

  3. পাইথনে ক্লাস কিভাবে সংজ্ঞায়িত করবেন?

  4. আমি কিভাবে একটি পাইথন নেমস্পেস তৈরি করব?