python c api, как я могу добавить функцию в класс, который определен на уровне c

#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.