#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. Я постараюсь получить его как можно скорее