2009-03-02 16 views
30

Implementé una clase en C++. Quiero usarlo con Python. Por favor, sugiera el método paso a paso y elabore cada paso. algo como esto ...¿Cómo puedo usar la clase C++ en Python?

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

Ahora, en Python

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

favor suggest.How puedo hacer esto? NOTA: Me gustaría saber la forma manual de hacerlo. No quiero ninguna dependencia de biblioteca de terceros.

+1

Simplemente curioso: ¿por qué quieres evitar a terceros? –

Respuesta

23

Mire en Boost.Python. Es una biblioteca para escribir módulos de Python con C++.

Consulte también SWIG, que también puede manejar módulos para otros lenguajes de scripting. Lo he usado en el pasado para escribir módulos para mi clase y usarlos en Python. Funciona genial.

Puede hacerlo manualmente utilizando el Python/C API, escribiendo la interfaz usted mismo. Es bastante bajo nivel, pero obtendrás mucho conocimiento adicional de cómo funciona Python detrás de la escena (y lo necesitarás cuando uses SWIG de todos modos).

+12

No cumple el requisito "No deseo ninguna dependencia de la biblioteca de terceros". – Constantin

+2

Necesitarás la biblioteca de Python de todos modos. incluye la api python/c, por supuesto. –

9

ctypes es bueno. Es realmente fácil de usar, y viene de serie con Python. Desafortunadamente, solo puede hablar con bibliotecas compartidas (Unix) o DLL (Windows) que tienen una interfaz C-style, lo que significa que no puede interactuar directamente con un objeto C++. Pero podría usar un sistema de asa donde un asa hace referencia a un objeto en particular.

>>> getInt(h) 
12 

Creo que es simple, fácil de entender y no requiere bibliotecas adicionales.

+1

¿Puede explicar lo que significa, "no puede hablar con bibliotecas compartidas o archivos DLL, lo que significa que no podría interactuar directamente con un objeto C++"? ¿Cuál sería el comportamiento de cambio inteligente al usar objetos C++ en Python? ¿Tendría un impacto notable? Necesito escribir un enlace a mi API de C++ en Python, gracias de antemano por cualquier ayuda. –

+3

@ 2g7hgfdr8324, me citaron mal. No dije "no puedes hablar con bibliotecas compartidas o archivos DLL". Dije lo opuesto. Sí, si puede exponer su API de C++ como una DLL, puede llamarla desde Python a través de ctypes. Su interfaz tendrá que ser simple C, no C++. –

Cuestiones relacionadas