Python
 Computer >> コンピューター >  >> プログラミング >> Python

Cメソッドを既存のPythonクラスにアタッチする方法は?


このメソッドは、C拡張モジュールから新しいPythonクラスを定義する方法を示しています。クラスのメソッドはCで実装されていますが、クラスはPythonからインスタンス化、サブクラス化、および拡張できます。継承を使用した同じ手法を使用して、Cで記述されたメソッドを使用して既存のPythonクラスを拡張することもできます。この手法では、PyClass_Newへの最初の引数がNULLとして渡され、新しいクラスに基本クラスがないことを示します。次に、この場所で基本クラスのタプルを渡します。新しいクラスがPythonソースコードではなくC拡張機能で構築されている場合でも、通常のPython継承動作が得られます。

#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. C#でクラスのメソッドを呼び出す方法

    メソッドを呼び出すには、オブジェクト名の後にメソッドの名前を使用します(例:-)。 obj1. Display(); クラス名がApplicationOneであるとすると、メソッドを呼び出す- ApplicationOne one = new ApplicationOne(); //calling the displayMax method ret = one.displayMax(a, b); 以下は、C#でメソッドを呼び出す方法を示す例です- 例 using System; namespace Demp {    class ApplicationOne { &

  2. PythonでROC曲線をプロットする方法は?

    ROC −受信者動作特性(ROC)曲線。 metrics.plot_roc_curve(clf、X_test、y_test)メソッドを使用して、ROC曲線を描くことができます。 ステップ ランダムなnクラス分類問題を生成します。これにより、最初に、辺の長さが「2 * class_sep」の「n_informative」次元の超立方体の頂点について正規分布(std =1)される点のクラスターが作成され、各クラスに同数のクラスターが割り当てられます。 これらの機能間に相互依存性を導入し、データにさまざまなタイプのノイズを追加します。 make_classification()メソッドを