我使用痛饮生成python绑定到YaST。 我添加功能称为YCPValue父类,通过延长%。 痛饮还添加这些父类功能的儿童类(YCPCode,例如)。我不想在孩子中使用那些父类函数,因此我使用%ignore来忽略每个函数。除了痛饮仍包括功能I%不理。这是不是因为的%父类扩展?没有人知道是否有一种方法仍然从孩子排除这些功能呢?
%include <ycp/YCPValue.h>
%extend YCPValue {
bool isCode() {
return (*($self))->isCode();
}
YCPCode asCode() {
return (*($self))->asCode();
}
}
%include <ycp/YCPCode.h>
%ignore YCPCode::isCode();
%ignore YCPCode::asCode();
这里的想法是,我可能会返回一个YCPValue类型,然后必须使用isCode()函数来看看它是什么,以及asCode()返回类型为YCPCode对象。但是如果我返回YCPCode对象,那么我不希望有这些额外的功能(因为它muddies的pydocs等)。这里涉及到多个子类也,这仅仅是一个例子。
答案 0 :(得分:0)
您可以做的是以下
%extend SomeChild {
// Your C++ extenstion...
bool isCode() {
return (*($self))->isCode();
}
// Next your python extension
%pythoncode %{
if _newclass:
__swig_dir__ = __swig_getmethods__.copy()
__swig_dir__.update(__swig_setmethods__)
__swig_dir__ = list(__swig_dir__.keys())
__swig_dir__.remove('asCode')
def __dir__(self):
return SomeChild.__swig_dir__
%}
};
这不是最优雅的解决方案,但是我早些时候已使用这些重载来过滤掉不希望被调用的函数。