2017-07-26 54 views
1

我嘗試使用Python中的覆蓋函數,這是Cpp類的一部分。如何啓用Swig發出C++超類

class A { 

    public: 
     int func() { return 0; }; 
     A(); 
}; 

class B : A { 
public: 
    B(); 
    ~B(); 
}; 

我使用下面的命令來生成痛飲蟒文件

swig -python -fvirtual -modern -keyword -w511 -module a_swig -outdir . -c++ -I. a_swig.i 

但我看到正在生成此Python文件:

class A(object): 
thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') 
__repr__ = _swig_repr 

def func(self): 
    return _iris_swig.A_func(self) 

def __init__(self): 
    this = _A_swig.new_A() 
    try: 
     self.this.append(this) 
    except __builtin__.Exception: 
     self.this = this 
__swig_destroy__ = _A_swig.delete_A 
__del__ = lambda self: None 

A_swigregister = _A_swig.A_swigregister 
A_swigregister(A) 

class B(object): 
    thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') 
__repr__ = _swig_repr 

    def __init__(self, *args, **kwargs): 
    this = _A_swig.new_B(*args, **kwargs) 
    try: 
     self.this.append(this) 
    except __builtin__.Exception: 
     self.this = this 
    __swig_destroy__ = _iris_swig.delete_B 
    __del__ = lambda self: None 
packet_header_iris_swigregister = _iris_swig.packet_header_iris_swigregister 
packet_header_iris_swigregister(packet_header_iris) 

我想看乙從A被擴展,所以我可以在python中使用b.func()

class B (A): 
... 

有什麼我失蹤?

回答

1

B類只從A私下繼承,所以SWIG不能在Python中表示。將它改爲公有繼承,你會看到你期待的關係。