#cpython
#cpython
Вопрос:
Я определил тип spam.Foo следуйте определению новых типов.
Что нравится.
PyObject *m;
m = Py_InitModule(MODULE_NAME, Spam_methods);
int rst = PyModule_AddObject(m, "Foo", (PyObject *)amp;FooPyType);
if (rst == -1) {
throw std::runtime_error("PyModule_AddObject(Foo) failed");
}
И Foo PyTypeObject выглядит следующим образом:
PyTypeObject FooPyType = {
PyVarObject_HEAD_INIT(amp;PyType_Type, 0)
"spam.Foo",
sizeof(Foo),
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
reinterpret_cast<reprfunc>(FooType_str),
0,
0,
0,
Py_TPFLAGS_DEFAULT,
"The spam Foo",
0,
0,
0,
0,
0,
0,
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'
.
Как я могу это сделать.
Комментарии:
1. Можете ли вы обновить вопрос соответствующей частью
C
кода?2. Привет, @AbdulNiyasPM. Я уже добавил код части C.