• C++调用Python6:调用Python类


    # mytest.py
    
    class Test:
        def hello(self):
            print("this is test class hello function no params return 123")
            return 123
    
        def myadd(self, x, y):
            print("this is test class myadd function params x y return x+y")
            print(f'{x}--{y}')
            return x + y
    #include "Python.h"
    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        Py_Initialize();
        if (!Py_IsInitialized())
        {
            cout << "初始化失败" << endl;
        }
        
        PyRun_SimpleString("import sys");
        PyRun_SimpleString("sys.path.append('./')");
    
        PyObject* pModel = nullptr;
        pModel = PyImport_ImportModule("mytest");
    
    
        PyObject* pDict = PyModule_GetDict(pModel);
    
        // 获取 Test 类,及实例
        PyObject* pTestClass = PyDict_GetItemString(pDict, "Test");
        PyObject* pTest = PyObject_CallObject(pTestClass, nullptr);
    
        // 调用类方法 hello
        PyObject* hello = PyObject_CallMethod(pTest, "hello", "", "");
        int helloRes = PyLong_AsLong(hello);
        Py_DecRef(hello);
        cout << "class hello is:" << helloRes << endl;
    
        // 调用类方法 myadd
        PyObject* myadd = PyObject_CallMethod(pTest, "myadd", "(ii)", 456, 123);
        int myaddRes = PyLong_AsLong(myadd);
        Py_DecRef(myadd);
        cout << "class myadd is:" << myaddRes << endl;
        
    
        Py_DecRef(pTest);
        Py_DecRef(pTestClass);
        Py_DecRef(pDict);
        Py_DecRef(pModel);
    
        Py_Finalize();
        return 0;
    }
  • 相关阅读:
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    第 7 章 Neutron
    iOS 屏幕旋转 nav+tabbar+present(网页) 2016
  • 原文地址:https://www.cnblogs.com/shiyixirui/p/16093197.html
Copyright © 2020-2023  润新知