swig忽略继承函数

2024-09-29 23:22:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用swig生成到YaST的python绑定。 我正在通过%extend向名为YCPValue的父类添加函数。 Swig还将这些父类函数添加到子类(例如YCPCode)。我不希望那些父类函数在子类中,所以我使用%ignore忽略每个函数。但swig仍然包含我%忽略的函数。这是因为父类上的扩展百分比吗?有没有人知道有没有办法从孩子身上排除这些功能?你知道吗

%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对象,那么我不希望有这些额外的函数(因为它会弄乱pydocs等)。这里也涉及到更多的儿童课程,这只是一个例子。你知道吗


Tags: 函数self类型returninclude子类swigignore
1条回答
网友
1楼 · 发布于 2024-09-29 23:22:23

你能做的是

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

这不是最优雅的解决方案,但我在前面使用了这些重载来过滤掉不打算调用的函数。你知道吗

相关问题 更多 >

    热门问题