Python论坛  - 讨论区

标题:[python-chinese] 请问swig的一个简单问题

2005年07月15日 星期五 15:36

kassarar kassarar at 126.com
Fri Jul 15 15:36:48 HKT 2005

请问,用swig怎么把class或者struct转为python的class啊,好像我每一次编出来的模块都没有原来头文件里面定义过的类
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050715/6891fc24/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月15日 星期五 15:57

张骏 zhangj at foreseen-info.com
Fri Jul 15 15:57:18 HKT 2005

是不是没加参数啊 swig -c++ -python

写python的C扩展用boost.python或者pyrex也不错,特别是boost.Python,很有趣


----------------------- Original Message -----------------------
From:    "kassarar" <kassarar at 126.com>
To:      "中蟒" <python-chinese at lists.python.cn>
Date:    Fri, 15 Jul 2005 15:36:48 +0800 (CST)
Subject: [python-chinese] 请问swig的一个简单问题
----------------------------------------------------------------
> 请问,用swig怎么把class或者struct转为python的class啊,好像我每一次编出来的模块都没有原来头文件里面定义过的类

--------------------- Original Message Ends --------------------

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月15日 星期五 20:28

wangmm kernellearn at gmail.com
Fri Jul 15 20:28:27 HKT 2005

能不能举个例子说说boost.python呢?

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月15日 星期五 22:17

张骏 zhangj at foreseen-info.com
Fri Jul 15 22:17:00 HKT 2005

// Copyright Ralf W. Grosse-Kunstleve 2002-2004. Distributed under the Boost
// Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

#include 
#include 

namespace { // Avoid cluttering the global namespace.

  // A friendly class.
  class hello
  {
    public:
      hello(const std::string& country) { this->country = country; }
      std::string greet() const { return "Hello from " + country; }
    private:
      std::string country;
  };

  // A function taking a hello object as an argument.
  std::string invite(const hello& w) {
    return w.greet() + "! Please come soon!";
  }
}

#include pythonclass.hpp>
#include pythonmodule.hpp>
#include pythondef.hpp>

BOOST_PYTHON_MODULE(getting_started2)
{
    using namespace boost::python;
    class_("hello", init())
        // Add a regular member function.
        .def("greet", &hello;::greet)
        // Add invite() as a member of hello!
        .def("invite", invite)
        ;
    
    // Also add invite() as a regular function to the module.
    def("invite", invite);
}

这是boost自带的例子。
注意BOOST_PYTHON_MODULE(getting_started2),这里定义了一个module
里面又声明了一个python的类:使用class_<...>声明类,使用def(...,...)声明
函数

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月16日 星期六 09:44

Hou Ming Yuan houmingyuan at gmail.com
Sat Jul 16 09:44:15 HKT 2005

个人觉得还是用swig比较简单一点。可以直接使用swig对C++头文件进行装换。主要分成四步
1)准备好C++的源文件
如下
car.cpp
car.h
2) 编写interface文件
car.i 
%module car
%{
#include "car.h"
%}
 %include car.h
 3) 使用SWIG生成warpper文件
#swig -c++ -python car.i
生成两个文件 car_wrapper.cxx car.py
 4) 将源文件和car_wrapper.cxx一起编译成一个动态库_car.so
 之后就可以在python 中使用
#python
#import car
 这些步骤说起来多,如果写在makefile里面就很简单了,以后即使C++的类更改只要重新用swig生成,不需要额外手工劳动了。
 在05-7-15,kassarar <kassarar at 126.com> 写道: 
> 
> 请问,用swig怎么把class或者struct转为python的class啊,好像我每一次编出来的模块都没有原来头文件里面定义过的类
> 
> 
> 
> 
> 
> 需要一个2000兆的免费邮箱吗?
> 网易免费邮箱是中国最多人使用的电子邮箱。 <http://mail.163.com/> 
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050716/d8e7cd3f/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月16日 星期六 10:54

shhgs shhgs.efhilt at gmail.com
Sat Jul 16 10:54:27 HKT 2005

怎样让Python使用C++的类?
//----------------------------------------------------
// cppobject.cc
#include 
using namespace std;

class cppobj {
    private :
        string s;
    public :
        cppobj(string a): s(a) {};
        string show() {return s;}
};
//-----------------------------------------------------

比方说我有上面这个类,现在我想让python使用cppobject的对象
>>> c = cppobj("hello")
>>> print c.show()
hello

请问怎样用swig实现?




On 7/15/05, Hou Ming Yuan <houmingyuan at gmail.com> wrote:
> 个人觉得还是用swig比较简单一点。可以直接使用swig对C++头文件进行装换。主要分成四步 
> 1)准备好C++的源文件 
> 如下 
> car.cpp 
> car.h 
> 2)  编写interface文件 
> car.i 
> %module car 
> %{ 
> #include "car.h" 
> %} 
>   
> %include car.h 
>   
> 3) 使用SWIG生成warpper文件 
> #swig -c++ -python car.i 
> 生成两个文件 car_wrapper.cxx car.py 
>   
> 4) 将源文件和car_wrapper.cxx一起编译成一个动态库_car.so 
>   
> 之后就可以在python 中使用 
> #python 
> #import car 
>   
> 这些步骤说起来多,如果写在makefile里面就很简单了,以后即使C++的类更改只要重新用swig生成,不需要额外手工劳动了。
>   
> 在05-7-15,kassarar <kassarar at 126.com> 写道: 
> >
> 请问,用swig怎么把class或者struct转为python的class啊,好像我每一次编出来的模块都没有原来头文件里面定义过的类
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 需要一个2000兆的免费邮箱吗?
> > 网易免费邮箱是 中国最多人使用的电子邮箱。 
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> > 
> > 
> > 
> 
>  
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月16日 星期六 15:25

Hou Ming Yuan houmingyuan at gmail.com
Sat Jul 16 15:25:42 HKT 2005

1)List-1: cppobj.h
//----------------------------------------------------
// cppobj.h

#include  
using namespace std;
class cppobj {
private : 
string s;
public:
cppobj(string a): s(a) {};
string show() {return s;} 
};
//-----------------------------------------------------
2) List-2 cppobj.i
%module cppobj
%include "std_string.i"

%{
#include "cppobj.h"
%}

%include "cppobj.h"
//-----------------------------------------------------
3) List-3 Makefile
all: _cppobj.so

_cppobj.so: cppobj_wrap.o
g++ -o $@ $< -shared -fpic

cppobj_wrap.cxx: cppobj.i cppobj.h
swig -c++ -python cppobj.i

cppobj_wrap.o: cppobj.h cppobj_wrap.cxx
g++ -c cppobj_wrap.cxx -fpic -I/usr/include/python2.4

clean:
rm -rf cppobj_wrap.cxx _cppobj.so *.o cppobj.py cppobj.pyc

4) 一下使我如何使用的
[houmingyuan at mycomputer swig]$ python
Python 2.4.1 (#1, Jun 19 2005, 15:23:32) 
[GCC 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)] linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import cppobj 
>>> c = cppobj.cppobj("hello") 
>>> c.show() 
'hello' 
>>> 

 在05-7-16,shhgs <shhgs.efhilt at gmail.com> 写道: 
> 
> 怎样让Python使用C++的类?
> //----------------------------------------------------
> // cppobject.cc
> #include 
> using namespace std;
> 
> class cppobj {
> private :
> string s;
> public :
> cppobj(string a): s(a) {};
> string show() {return s;}
> };
> //-----------------------------------------------------
> 
> 比方说我有上面这个类,现在我想让python使用cppobject的对象
> >>> c = cppobj("hello")
> >>> print c.show()
> hello
> 
> 请问怎样用swig实现?
> 
> 
> 
> 
> On 7/15/05, Hou Ming Yuan <houmingyuan at gmail.com> wrote:
> > 个人觉得还是用swig比较简单一点。可以直接使用swig对C++头文件进行装换。主要分成四步
> > 1)准备好C++的源文件
> > 如下
> > car.cpp
> > car.h
> > 2) 编写interface文件
> > car.i
> > %module car
> > %{
> > #include "car.h"
> > %}
> >
> > %include car.h
> >
> > 3) 使用SWIG生成warpper文件
> > #swig -c++ -python car.i
> > 生成两个文件 car_wrapper.cxx car.py
> >
> > 4) 将源文件和car_wrapper.cxx一起编译成一个动态库_car.so
> >
> > 之后就可以在python 中使用
> > #python
> > #import car
> >
> > 这些步骤说起来多,如果写在makefile里面就很简单了,以后即使C++的类更改只要重新用swig生成,不需要额外手工劳动了。
> >
> > 在05-7-15,kassarar <kassarar at 126.com> 写道:
> > >
> > 请问,用swig怎么把class或者struct转为python的class啊,好像我每一次编出来的模块都没有原来头文件里面定义过的类
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > 需要一个2000兆的免费邮箱吗?
> > > 网易免费邮箱是 中国最多人使用的电子邮箱。
> > > _______________________________________________
> > > python-chinese list
> > > python-chinese at lists.python.cn
> > > http://python.cn/mailman/listinfo/python-chinese
> > >
> > >
> > >
> >
> >
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050716/e7bcadce/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号