在C++中创建的Python对象超出范围?

2024-10-03 13:28:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个项目目录,如下所示:

|__ __main__.py
|
|__ cppmodules
|        |__ foo.cpp
|        |__ Foo.so
|__ pymodules
         |__ bar.py

在foo.cpp中,我有以下功能:

boost::python::object mod;
void set_global(boost::python::object pymod){
    mod = pymod;
}
const boost::python::api::object None = boost::python::api::object();

class MyClass{
public:
    boost::python::object bar;
    MyClass(){}
    void do_stuff(bool param, int param2){
        boost::python::object _bar;
        if (this->bar != None){
            // do something with this->bar
        }
        else{
            _bar = mod.attr("Bar")(param, param2);
            // I overloaded the operator somewhere else
            cout << _bar << endl;
        }
        cout << _bar << endl;
    }
};

.py

from pymodules import bar as bar_module
from cppmodules.Foo import set_global

set_global(bar_module)

内棒.py

class Bar:
    def __init__(self, i, j):
        self.i = i
        self.j = j

第一个cout的输出正常,但第二个cout返回None:

<pymodules.bar.Bar object at 0x7f39f8b94748>
None

我完全不知道是什么导致了这个错误,也无法在其他地方复制它(我确实在一个案例中获得了导入错误,在另一个案例中获得了核心转储),但我怀疑这是引用计数或anaconda的问题。有没有办法至少弄清楚到底发生了什么


Tags: pyselfnonemodobjectfoobarglobal