Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyObject_CallMethod返回Null,提供了一个简单的示例 我是一个初学者Python程序员,致力于将一些Python代码嵌入到C++ DLL中。无法使PyObject_CallMethod工作,每次我调用Python3.6类方法时,它都返回Null。创建了一个小示例来说明这个问题,请参见代码中的注释。如果能给我一些关于我做错了什么的指导,我将不胜感激 #include "stdafx.h" using namespace std; int TestBasicStats() { _putenv_s("PYTHONPATH", "."); Py_Initialize(); PyObject* module = PyImport_ImportModule("BasicStats"); assert(module != NULL); // Returned non-null object PyObject* MyPyClass = PyObject_GetAttrString(module, "BasicStats"); assert(MyPyClass != NULL);// Returned non-null object PyObject* myClassInstance = PyInstanceMethod_New(MyPyClass); assert(myClassInstance != NULL);// Returned non-null object PyObject* result = PyObject_CallMethod(myClassInstance, "AddItem", "(i)", 1); assert(result != NULL); // Failed - returned NULL result = PyObject_CallMethod(myClassInstance, "AddItem", "(i)", 2); assert(result != NULL); // Failed - returned NULL result = PyObject_CallMethod(myClassInstance, "get_Max", NULL); assert(result != NULL); // Failed - returned NULL printf("Min = %ld\n", PyLong_AsLong(result)); printf("Min = %f\n", PyFloat_AsDouble(result)); Py_Finalize(); return 0; } int main() { TestBasicStats(); return 0; }_Python_C++ - Fatal编程技术网

PyObject_CallMethod返回Null,提供了一个简单的示例 我是一个初学者Python程序员,致力于将一些Python代码嵌入到C++ DLL中。无法使PyObject_CallMethod工作,每次我调用Python3.6类方法时,它都返回Null。创建了一个小示例来说明这个问题,请参见代码中的注释。如果能给我一些关于我做错了什么的指导,我将不胜感激 #include "stdafx.h" using namespace std; int TestBasicStats() { _putenv_s("PYTHONPATH", "."); Py_Initialize(); PyObject* module = PyImport_ImportModule("BasicStats"); assert(module != NULL); // Returned non-null object PyObject* MyPyClass = PyObject_GetAttrString(module, "BasicStats"); assert(MyPyClass != NULL);// Returned non-null object PyObject* myClassInstance = PyInstanceMethod_New(MyPyClass); assert(myClassInstance != NULL);// Returned non-null object PyObject* result = PyObject_CallMethod(myClassInstance, "AddItem", "(i)", 1); assert(result != NULL); // Failed - returned NULL result = PyObject_CallMethod(myClassInstance, "AddItem", "(i)", 2); assert(result != NULL); // Failed - returned NULL result = PyObject_CallMethod(myClassInstance, "get_Max", NULL); assert(result != NULL); // Failed - returned NULL printf("Min = %ld\n", PyLong_AsLong(result)); printf("Min = %f\n", PyFloat_AsDouble(result)); Py_Finalize(); return 0; } int main() { TestBasicStats(); return 0; }

PyObject_CallMethod返回Null,提供了一个简单的示例 我是一个初学者Python程序员,致力于将一些Python代码嵌入到C++ DLL中。无法使PyObject_CallMethod工作,每次我调用Python3.6类方法时,它都返回Null。创建了一个小示例来说明这个问题,请参见代码中的注释。如果能给我一些关于我做错了什么的指导,我将不胜感激 #include "stdafx.h" using namespace std; int TestBasicStats() { _putenv_s("PYTHONPATH", "."); Py_Initialize(); PyObject* module = PyImport_ImportModule("BasicStats"); assert(module != NULL); // Returned non-null object PyObject* MyPyClass = PyObject_GetAttrString(module, "BasicStats"); assert(MyPyClass != NULL);// Returned non-null object PyObject* myClassInstance = PyInstanceMethod_New(MyPyClass); assert(myClassInstance != NULL);// Returned non-null object PyObject* result = PyObject_CallMethod(myClassInstance, "AddItem", "(i)", 1); assert(result != NULL); // Failed - returned NULL result = PyObject_CallMethod(myClassInstance, "AddItem", "(i)", 2); assert(result != NULL); // Failed - returned NULL result = PyObject_CallMethod(myClassInstance, "get_Max", NULL); assert(result != NULL); // Failed - returned NULL printf("Min = %ld\n", PyLong_AsLong(result)); printf("Min = %f\n", PyFloat_AsDouble(result)); Py_Finalize(); return 0; } int main() { TestBasicStats(); return 0; },python,c++,Python,C++,调用的Python类如下所示: class BasicStats: def __init__(self): self._m_min = self._m_max = self._m_sum = self._m_sumSqr = 0 self._m_count = 0 self.Reset() def Reset(self): self._m_min = float("inf") self._m_max = float("-inf") self._m

调用的Python类如下所示:

class BasicStats:
def __init__(self):
    self._m_min = self._m_max = self._m_sum = self._m_sumSqr = 0
    self._m_count = 0
    self.Reset()

def Reset(self):
    self._m_min = float("inf")
    self._m_max = float("-inf")
    self._m_sum = self._m_sumSqr = 0
    self._m_count = 0

def AddItem(self, value):
    self._m_count += 1
    if self._m_max < value:
        self._m_max = value

def get_Max(self):
    return self._m_max

Max = property(fget=get_Max)
类基本测试:
定义初始化(自):
self.\m\u min=self.\m\u max=self.\m\u sum=self.\m\u sumSqr=0
自计数=0
self.Reset()
def重置(自):
self._m_min=浮动(“inf”)
self._m_max=浮点(“-inf”)
self.\m\u sum=self.\m\u sumSqr=0
自计数=0
def附加项(自身、值):
自身计数+=1
如果self.\m\u max<值:
self.\m\u max=值
def get_Max(自身):
返回自我
Max=属性(fget=get\u Max)

我不明白的是
PyInstanceMethod\u New()
调用。我真的不知道它在做什么,因为我从来没有在我的任何代码中使用过它。从
PyObject\u GetAttrString()
调用中获得的
PyObject
应该是类型对象,因此是可调用的,可以调用它来创建该类型的新对象。因此,要创建一个
BasicStats
对象,我将调用type对象作为函数:

PyObject* myClassInstance = PyObject_CallFunctionObjArgs(myPyClass, NULL);
我相信

PyObject* myClassInstance = PyInstanceMethod_New(MyPyClass);
真的应该

// should call __init__. assumes __init__() has arity of 1
// otherwise you will have to marshall correct arguments
PyObject* myClassInstance = PyObject_CallObject(MyPyClass, 0);

文档中说,
PyInstanceMethod\u New
创建了一个函数,这解释了为什么它不起作用,实际上它没有创建实例。