gpt4 book ai didi

Python C++ 绑定(bind)类型向上转换问题

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:42 25 4
gpt4 key购买 nike

我有一个 C++ 代码,它依赖于一个大型库(具体来说是 OpenBabel),并使用它的一些类作为我的类的基础。这个库有自己的 Python 绑定(bind),使用 SWIG 创建。我已经使用此库接口(interface)的“%import”为我的代码构建了 Python 绑定(bind)和 SWIG。在将我的类传递给 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))

关于Python C++ 绑定(bind)类型向上转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28608642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com