2009-11-22 3 views
2

나는 Python부터 SWIG에 노출 된 C++가 있습니다. 단일 순수 가상 함수를 가진 기본 클래스가 있습니다.C++ baseclass가있는 Python 하위 클래스

파이썬에서는 모듈을 가져 와서 추상 클래스를 기본 클래스로 사용하는 클래스를 정의합니다.

import mymodule 
class Foo(mymodule.mybase): 
    ... 

해당 모듈은 관리자 클래스이기도하므로 새 정의 된 클래스를 관리자에 추가하고 싶습니다. 추가의

m = mymodule.mymanager() 
m.add(Foo()) 

정의 :

void add(mybase* b) { ... } 
내가 기대하는 것처럼

작동하지 않았다 :

TypeError: in method 'mymanager_add', argument 2 of type 'mymodule::mybase *' 

나는 무엇을 그리워 했습니까? 내 Foo 클래스가 "mybase"인지 확실하지 않은 것 같습니다. 파이썬에서 기본 클래스 생성자에 대한 호출을 추가하려고 시도했지만 작동하지 않았다고 클래스가 추상이라고 말했다.

def __init__(self): 
    mymodule.mybase.__init__(self) 

답변

2

내 생각에 Foo은 C++ 환경에서 보면 mybase에서 파생되지 않았습니다. SWIG가 상속에 대한 양방향 이해가 필요하기 때문에이 문제를 해결할 수 있을지 확신하지 못합니다. Python 클래스는 C++ 클래스를 기반으로 사용하고 C++ 코드는 상속 관계를 인식합니다. 이후의 기능을 지원하는 것으로 보이기 때문에 Boost.python을 자세히 살펴 보겠습니다. Here's an entry on wiki.python.org about it.

0

실제로 대답은 아니지만 boost.python을 사용하는 것이 더 나을 것입니다. 얼마나 많은 작업을 전환해야할지 모르겠지만 문제에 대한 간단한 상속 테스트 사례를 매우 빠르게 얻을 수 있습니다.

+0

먼저 부스트를 시도했습니다. 설치하는 데 오랜 시간이 걸렸지 만 결국에는 어쨌든 작동하지 못했습니다. 지금 다른 워크 스테이션에있는 Im 그리고 그 대머리에 다시 가져 가라. "그냥"boost.python을 설치하는 빠르고 쉬운 방법이 있는지 알지 못합니까? – Mizipzor

+0

어떤 플랫폼을 사용하고 계십니까? 나는 linux/mac에서 패키지 관리자/macports를 통해 얻을 수 있다고 생각했을 것이다. 그렇지 않으면 http://www.boost.org/doc/libs/1_41_0/libs/python/doc/building.html에 'No-install quickstart'섹션이 있습니다. – robince