痛饮忽略继承功能

时间:2019-01-31 18:26:38

标签: python swig

我使用痛饮生成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等)。这里涉及到多个子类也,这仅仅是一个例子。

1 个答案:

答案 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__
%}
};

这不是最优雅的解决方案,但是我早些时候已使用这些重载来过滤掉不希望被调用的函数。