当导入swig生成的模块时,Python会报错缺少delete方法

When importing a swig generated module, Python is complaining about missing delete method

本文关键字:方法 delete Python swig 导入 模块      更新时间:2023-10-16

我们有一组由swig包装的c++类。当在python中导入其中一个类时,我们会得到以下错误消息:

File ".../myobjects.py", line 176, in <module>
class RT(_object):
File ".../myobjects.py", line 187, in RT
__swig_destroy__ = _myobjects.delete_RT
AttributeError: 'module' object has no attribute 'delete_RT'

myobjects.py swig生成的RT代码如下:

class RT(_object):
    __swig_setmethods__ = {}
    __setattr__ = lambda self, name, value: _swig_setattr(self, RT, name, value)
    __swig_getmethods__ = {}
    __getattr__ = lambda self, name: _swig_getattr(self, RT, name)
    __repr__ = _swig_repr
    def __init__(self, *args):
        this = _myobjects.new_RT(*args)
        try: self.this.append(this)
        except: self.this = this
    def getName(self): return _myobjects.RT_getName(self)
    __swig_destroy__ = _myobjects.delete_RT
    __del__ = lambda self : None;

和cxx文件,其中_myobjects。所以它的创建有以下几行:

SWIGINTERN PyObject *_wrap_delete_RT(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
  PyObject *resultobj = 0;
  RT *arg1 = (RT *) 0 ;
...

简而言之,所有内容都按顺序出现,但我们仍然得到python错误。

有什么想法吗?

谢谢,

。托马

嗯,不确定为什么会发生这种情况,但是cxx文件中前面的class被两个i文件包含。删除一个包含修复了这个问题。