创建一个Python New Style类的实例以嵌入C ++

时间:2016-10-31 22:01:44

标签: python-2.7 class instance python-embedding pyobject

我正在使用PyObject将部分python代码嵌入C++。我找到了与python 2.7使用PyInstance_New创建python实例的解决方案。但它不适用于看起来像这样的新式python类。

    class B(object): 
      def __init__(self, name): 
        self.name = name

      def print_name(lastName): 
        print self.name + " " + lastName

在我的旧代码(python 2.7)中,类定义不会从对象类继承,我创建我的实例来调用这样的print_name方法。附:文件名是A.py.

    PyObject *import, *attr, *instance, *methodcall, *arg, *tuple;
    arg = PyString_FromString("hello"); 
    tuple = PyTuple_Pack(1, arg);  

    import = PyImport_ImportModule("A"); 
    attr = PyObject_GetAttrString(import, "B");
    instance = PyInstance_New(attr, arg, NULL); 

    methodcall = PyObject_CallMethod(instance, (char *) "print_name", (char *) "(s)", (char *) "Bill"); 

但上述代码不再适用,因为在新的python 3.x中,type(class)会返回object,而不是instance。现在,我收到了这个错误。

  

内部函数的错误参数。

感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定这是否适合你。但我建议你尝试一下。只需使用" PyObject_CallObject"初始化一个实例,然后使用" PyObject_CallMethod"调用实例的方法。