2009-03-02 5 views
30

나는 C++로 클래스를 구현했다. 파이썬에서 사용하고 싶습니다. 단계별 방법을 제안하고 각 단계를 자세히 설명하십시오. 이 같은 뭔가를해야만 ... 파이썬에서 C++ 클래스를 사용하려면 어떻게해야합니까?

>>> T1 = Test(12) 
>>> T1.getInt() 
12 
>>> T1.setInt(32) 
>>> T1.getInt() 
32 

suggest.How 나는이 작업을 수행 할 수 있습니다하시기 바랍니다 파이썬

에서 지금

class Test{ 
    private: 
     int n; 
    public: 
     Test(int k){ 
      n=k; 
     } 
     void setInt(int k){ 
      n = k; 
     } 
     int getInt(){ 
      return n; 
     } 
}; 

? 참고 :이를 수행하는 수동 방법을 알고 싶습니다. 제 3 자 라이브러리 의존성을 원하지 않습니다.

+1

궁금한 점 - 왜 제 3자를 피하고 싶습니까? –

답변

23

Boost.Python으로 조사하십시오. C++로 파이썬 모듈을 작성하는 라이브러리입니다.

다른 스크립팅 언어 용 모듈도 처리 할 수있는 SWIG을 살펴보십시오. 과거에 클래스에 대한 모듈을 작성하고 파이썬에서 사용했습니다. 훌륭하게 작동합니다.

인터페이스를 직접 작성하여 Python/C API을 사용하여 수동으로 수행 할 수 있습니다. 꽤 낮은 레벨이지만, 파이썬이 어떻게 동작하는지에 대한 많은 지식을 얻을 수 있습니다. (어쨌든 SWIG를 사용할 때 필요합니다).

+12

"제 3 자 라이브러리 종속성을 원하지 않습니다"요구 사항을 충족하지 않습니다. – Constantin

+2

어쨌든 파이썬 라이브러리가 필요합니다. 물론 python/c api가 포함되어 있습니다. –

9

ctypes이 좋습니다. 정말 사용하기 쉽고 파이썬에는 표준으로 제공됩니다. 유감스럽게도 C 스타일 인터페이스가있는 공유 라이브러리 (Unix) 또는 DLL (Windows)에서만 대화 할 수 있습니다. 즉, C++ 객체에 직접 인터페이스 할 수 없습니다. 그러나 핸들이 특정 객체를 참조하는 핸들 시스템을 사용할 수 있습니다.

>>> getInt(h) 
12 

단순하고 이해하기 쉽고 별도의 라이브러리가 필요하지 않다고 생각합니다.

+1

당신은 "공유 라이브러리 나 DLL에 대해 이야기 할 수 없다. 즉, C++ 객체에 직접 인터페이스 할 수 없다는 의미"에 대해 자세히 설명 할 수 있습니까? 파이썬에서 C++ 객체를 사용할 때 어떤 행동이 현명할까요? 눈에 띄는 영향을 미칠까요? 결국 파이썬에서 내 C++ API에 대한 바인딩을 작성해야합니다. 사전 도움을 요청하십시오. –

+3

@ 2g7hgfdr8324, 나를 잘못 인용했습니다. 나는 "당신이 공유 라이브러리 나 DLL과 이야기 할 수 없다"고 말하지 않았다. 나는 그 반대라고 말했다. 예, C++ API를 DLL로 노출 할 수 있다면 ctypes를 통해 Python에서 호출 할 수 있습니다. 귀하의 인터페이스는 C++가 아닌 일반 C 여야합니다. –

관련 문제