В дополнение к ответу @jhoon кажется, что SWIG не распознает тип возврата std :: string , поэтому измените функцию, чтобы она возвращала const char *. Кроме того, поскольку это функция вне класса, вы не можете использовать self, но вы должны использовать переменную SWIG $ self .
Итак, в файле SWIG .i , если вы введете следующее:
%extend OpenBabel::matrix3x3 {
const char* __str__() {
std::ostringstream out;
out << *$self;
return out.str().c_str();
}
};
вы должны получить желаемый результат при вызове печати Python для matrix3x3 .
Если вы обнаружите, что добавляете это во многие классы, рассмотрите возможность обернуть его в макрос, например:
%define __STR__()
const char* __str__() {
std::ostringstream out;
out << *$self;
return out.str().c_str();
}
%enddef
и добавление его в класс с помощью:
%extend OpenBabel::matrix3x3 {
__STR__()
};