python c api,如何向c层中定义的类添加函数

问题描述

我定义了垃圾邮件类型。请关注Defining New Types

这样。

PyObject *m;
m = Py_InitModule(MODULE_NAME,Spam_methods);

int rst = PyModule_Addobject(m,"Foo",(PyObject *)&FooPyType);
if (rst == -1) {
    throw std::runtime_error("PyModule_Addobject(Foo) Failed");
}

Foo PyTypeObject是这样的:

PyTypeObject FooPyType = {
    PyVarObject_HEAD_INIT(&PyType_Type,0)
    "spam.Foo",sizeof(Foo),reinterpret_cast<reprfunc>(FooType_str),Py_TPFLAGS_DEFAULT,"The spam Foo",FooType_methods,nullptr,FooType_getSet
};

现在我想用python代码创建一个函数

from spam import Foo
setattr(Foo,"bar",lambda self: "Hello from bar")

但是它抛出错误can't set attributes of built-in/extension type 'spam.Foo'

我该怎么做。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)