Python C++绑定类型upcast问题



我有一个C++代码,它依赖于一个大型库(具体来说是OpenBabel),并使用它的一些类作为我的类的基础。这个库有自己的使用SWIG创建的Python绑定。我已经用SWIG为我的代码构建了Python绑定,并使用该库接口的"%import"。当涉及到用Python代码将我的类传递到库的例程时,这很好。然而,我在从库的例程中检索类时遇到了问题。

为了澄清这个想法,我将展示一些代码。对于C++版本

class Derived: public Library::Base 
{
  // blah-blah
  std::string toString();
};
// the library has function, returning Base*
Library::Base* getData();
// In C++ code I siply use
Derived *d = static_cast<Derived*> (getData());
std::cout << d.toString();

现在我想在Python中做同样的事情:

d = getData();
print( d.toString() )

这导致一个错误:AttributeError: 'Base' object has no attribute 'toString'

print(d)导致<Library.Base; proxy of <Swig Object of type 'std::vector< Library::Base * >::value_type' at 0x7f0ff8279a20> >,因此这是C++的Base* 的包装器

我发现了这个升级建议:d.__class__ = Derived,但这对我来说很奇怪。而且,它不起作用。

那么,我应该如何在Python中升级,或者我做错了什么?

如何使用:

print(str(d))

相关内容

  • 没有找到相关文章

最新更新