2

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

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

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

在我的旧代码(python 2.7)中,类定义不继承自对象类,我创建实例来调用print_name这样的方法。PS 文件名为 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"); 

但是上面的代码不再起作用了,因为在 newpython 3.x中,type(class)returnsobject而不是instance. 现在,我收到了这个错误。

内部函数的错误参数。

任何帮助表示赞赏。谢谢你。

4

1 回答 1

1

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

于 2016-11-17T12:57:38.380 回答