Python嵌入C++详解(3)--Import Class

继前篇《Import Module》(http://blog.csdn.net/xiadasong007/archive/2009/09/02/4512797.aspx),继续分析嵌入部分基础知识。这次不多说,有什么问题记得多查英文资料,国内的这方面知识少

 

还是来看代码,写完我就睡觉了~

 
#include "python/python.h"
#include <iostream>
using namespace std;

 

int main(int argc,char** argv)
{
 PyObject *pModule, *pClass,*pStuObj,*pFunc;

 Py_Initialize();
 
 //载入模块stu.py
 pModule = PyImport_ImportModule ("stu");

 

 //从模块中得到类Student
 pClass = PyObject_GetAttrString (pModule, "Student");

 

 //生成一个学生对象jack,注意3.1版本必须加上小括号:(s),否则会出错
 //PyObject_CallObject和另外一个常用的PyEval_CallObject用法极为相近,请看附录部分详解
 PyObject * temp=Py_BuildValue("(s)","jack");
 pStuObj = PyObject_CallObject(pClass, temp);

 

    //获得函数对象jack中的成员函数printName,
    //这个getattr的意思就是得到当前对象的属性(不要局限于C++中的属性哦)
  pFunc= PyObject_GetAttrString (pStuObj, "printName");

 

 //调用函数printName
  PyEval_CallObject (pFunc, NULL); 


 
 Py_Finalize();
 return 0;
}


/*
附录:

1:Student类,我发现print后面现在必须加上小括号了,否则会有问题

 

class Student:
    name=""
    def __init__(self,name):
        self.name=name
    def printName(self):
        print (self.name)

2:PyObject_CallObject和 PyEval_CallObject不同之处:
可以看出,后者较为直接,而且接受NULL,and does explicit type checks
for args and kwds.

PyObject_CallObject(PyObject *o, PyObject *a)
{
!  PyObject *r;
!  PyObject *args = a;
!
!  if (args == NULL) {
!   args = PyTuple_New(0);
!   if (args == NULL)
!    return NULL;
!  }
!
!  r = PyEval_CallObject(o, args);
!
!  if (args != a) {
!   Py_DECREF(args);
!  }
!
!  return r;
}

PyObject_CallObject(PyObject *o, PyObject *a)
{
!  return PyEval_CallObjectWithKeywords(o, a, NULL);
}
*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值