如何将python c-extension方法声明为类方法?
作者:互联网
我正在为C类编写一个python包装器,该包装器为备用“构造函数”提供了几种静态方法.我想知道如何通过python c-api导出这些?
这是相关的C代码的存根.
PyObject *PyFoo_FromFoo(Foo foo);
// This should be a class method that create a new instance of PyFoo().
PyObject *
PyFoo_Gen1(PyObject *self, PyObject *args)
{
Foo foo; // Init this according to args
return PyFoo_FromFoo(foo);
}
static PyMethodDef PyFoo_methods[] = {
{"Gen1", (PyCFunction)PyFoo_Gen1, METH_VARARGS, "Gen1 foo creator" },
{NULL} /* Sentinel */
};
PyTypeObject PyFooType = {
:
PyFoo_methods, /* tp_methods */
:
}
PyObject *PyFoo_FromFoo(Foo foo)
{
PyFoo *v = (PyFoo*)PyObject_New(PyFoo, &PyFooType);
v->foo = foo;
return (PyObject*)v;
}
在上面的示例中,对Gen1()使用classmethod()函数(直接或通过@classmethod装饰器)会是什么意思?
解决方法:
从python 2.3开始,可以使用METH_CLASS完成此操作.有关示例,请参见datetime模块.
标签:python-c-api,python 来源: https://codeday.me/bug/20191030/1966134.html