Я работаю с 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
, подобного этому. P.S. имя файла 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
. Теперь я получаю эту ошибку.
плохой аргумент для внутренней функции.
Любая помощь приветствуется. Спасибо.
instance = PyObject_CallObject(attr /*the class*/, tuple /*args in tuple*/);
- person All Workers Are Essential   schedule 17.11.2016