Инициализация объекта python из C с помощью boost / python возвращает None

#python #c #oop #boost #python-extensions

#python #c #ооп #boost #python-расширения

Вопрос:

У меня есть модуль python, который я импортировал в C следующим образом :

.cpp-файл:

 boost::python::object mod;
void init_mod(boost::python::object o){
    mod = o;
}
// some code
BOOST_PYTHON_MODULE(MyModule){
    def("init_mod", amp;init_mod);
    // for the other code
}
  

из python я импортирую модуль и присваиваю его:

 from ..utilities import foo as foo_module
init_mod(foo_module)
  

В foo у меня есть класс с именем Foo и функция-оболочка, которая может возвращать объект Foo

 class Foo:
    def __init__(self, i, j, k):
        self._i = i
        self._j = j
        self._k = k
        self._done = False
def wrapper_foo(i, j, k):
    return Foo(i,j,k)
  

И в том же файле C я попытался создать объект Foo, но он возвращает None:

 Bar* create_foo(){
    // this returns None
    boost::python::object foo = mod.attr("Foo")(1,2,3);
    foo.attr("_done") = true; // NoneType has no attribute _done error
    // this also returns None
    boost::python::object foo2 = mod.attr("wrapper_foo")(1,2,3);
    foo2.attr("_done") = true; // NoneType has no attribute _done error
    // some other code
    return bar_object;
  

Как я могу это исправить или обойти?

Спасибо

Комментарии:

1. Можете ли вы предоставить минимально воспроизводимый пример?

2. Я постараюсь получить его как можно скорее