Проблемы с загрузкой типа привязок в Python C ++

У меня есть код C ++, который зависит от большой библиотеки (в частности, OpenBabel) и использует некоторые из ее классов в качестве основы для моих классов. Эта библиотека имеет свои собственные привязки Python, созданные с помощью SWIG. Я построил привязки Python с помощью SWIG для своего кода с «% 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Однако это выглядит странно для меня. Более того, это не работает.

Итак, как я должен upcast в Python, или что я делаю не так?

1

Решение

как насчет использования:

print(str(d))
0

Другие решения


По вопросам рекламы [email protected]