Поиск, существует ли функция-член в Boost python :: object

Я использую Boost Python для совместной работы C ++ и Python, и у меня есть код, который выглядит следующим образом: создается экземпляр объекта python и вызывается одна из его функций-членов.

bp::object myInstance;
// ... myInstance is initialized
bp::object fun = myInstance.attr("myfunction");
fun();

Я хотел бы проверить, существует ли функция-член, прежде чем вызывать ее. Если его не существует, я не хочу звонить.

Проблема в том, что вызов myInstance.attr («myfunction») успешен, даже если функция не существует. Следовательно, единственный способ проверить, существует ли функция в моем текущем коде, это попытаться вызвать ее и перехватить исключение.

Есть ли способ проверить, существует ли функция без исключения или вызова функции?

2

Решение

призыв к myInstance.attr("myfunction") успешно, даже если функция не существует

Уверен, это бросает AttributeError,

Есть ли способ проверить, существует ли функция без исключения или вызова функции?

Одна из странных дыр в Boost.Python заключается в том, что он не имеет hasattr() функция. Достаточно просто добавить:

namespace boost { namespace python {
bool hasattr(object o, const char* name) {
return PyObject_HasAttrString(o.ptr(), name);
}
} }

и тогда вы можете просто использовать его:

if (hasattr(myInstance, "myfunction")) {
bp::object fun = myInstance.attr("myfunction");
fun();
// ...
}
5

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector