程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python & C + + Mixed invoke Programming full Reality - 16c + + invoke Python class instanciated Object Access Member Functions and Members

編輯:Python

Auteur:Mon oncle.
Blogs:https://xuhss.com

Le petit - déjeuner n'est pas ouvert la nuit,Celui qui veut manger est déjà là!

c++AppelezpythonObjet d'Instanciation de classe pour accéder aux fonctions des membres et aux membres

Un.、PythonAjouter un exemple de classe

Intest.pyAjouter une classe,Pour être utilisé parC++Appeler l'accès:

print('test.py')
class TypePy:
def __init__(self):
print("TypePy init")
def test(self):
print("TypePy test")

2.、C++Fonction membre de la classe d'appel dans

 {

// Obtenir la classe
PyObject* TypePy = PyObject_GetAttrString(m, "TypePy");
if (!TypePy) {

throw exception("TypePy noe find!");
}
// Objet instantané équivalent à appeler un constructeur __init__ Passer les arguments du constructeur NULL
PyObject *obj = PyObject_CallObject(TypePy, NULL);
if (!obj) {

throw exception("obj not Create!");
}
// Appelez la fonction membre de la classe 
PyObject_CallMethod(obj, "test", 0);
Py_XDECREF(obj);
Py_XDECREF(TypePy);
}

Exécution:

Vous pouvez voir la sortie de la chaîne désirée

Trois、 Appel à une fonction de classe avec arguments

Modifiertest.pyClasse dansTypePyFonctions danstestParamètres et valeurs de retour pour:

class TypePy:
def __init__(self):
print("TypePy init")
def test(self, arg1, arg2):
print("TypePy test")
print("arg1 = ", arg1)
print("arg2 = ", arg2)
return 1003

C++ Ajouter à un seul paramètre PythonAppel de classe

 // Appelez la fonction membre de la classe i(int) s(string)
PyObject *re = PyObject_CallMethod(obj, "test", "is", 2001, "c Para2");
cout << "PyObject_CallMethod return" << PyLong_AsLong(re) << endl;
Py_XDECREF(re);

Exécution:

Quatre、Accès aux variables des membres

Ajoutertest.py Variable membre de classe dans

class TypePy:
id = 99
def __init__(self):
print("TypePy init")
def test(self, arg1, arg2):
print("TypePy test")
print("arg1 = ", arg1)
print("arg2 = ", arg2)
return 1003

C++Ajouter une pairePythonAccès aux variables des membres de la classe

 // Accéder aux variables des membres
PyObject* var = PyObject_GetAttrString(obj, "id");
cout << "TypePy.id=" << PyLong_AsLong(var) << endl;
Py_XDECREF(var);

Exécution:

CompletC++AppelezPythonCode de classe

#include <iostream>
#include <Python.h>
#include <exception>
using namespace std;
int main(int argc, char*argv[])
{

cout << "C++ call Python" << endl;
// ParamètresPythonDeHomeChemin
Py_SetPythonHome(L"./");
// PythonInitialiser l'interpréteur
Py_Initialize();
PyObject *m = NULL; // Module principal
try
{

int re = 0;
// Mise en œuvrePythonScript
re = PyRun_SimpleString("print('Hello world!')");
re = PyRun_SimpleString("print(\"__name__ = \", __name__)");
// Mise en œuvrePythonDocumentation
char* filename = "test.py";
FILE * fp = fopen(filename, "r");
if (!fp)
{

throw exception("open file failed");
}
PyRun_AnyFile(fp, filename);
if (re != 0)
{

PyErr_Print();
throw exception("PyRun_AnyFile failed");
}
// Obtenir le module principal 
PyObject *key = PyUnicode_FromString("__main__");
m = PyImport_GetModule(key); // Ne pas nettoyer les paramètres ,Nettoyage manuel nécessaire
Py_XDECREF(key);
// 2-1 AppelezpythonVariable de pythonFaire un profil
//con = {

// "width":1920,
// "heigth" : 1080,
// "title" : "C++ call Python"
//}
{

// Obtenir des objets par module et nom (L'objet peut être une variable、Fonctions et classes)
PyObject* conf = PyObject_GetAttrString(m, "conf");
if (!conf) {

throw exception("conf noe find!");
}
PyObject *key = PyUnicode_FromString("width");
int width = PyLong_AsLong(PyDict_GetItem(conf, key));
Py_XDECREF(key);
key = PyUnicode_FromString("height");
int height = PyLong_AsLong(PyDict_GetItem(conf, key));
Py_XDECREF(key);
key = PyUnicode_FromString("title");
wchar_t title[1024] = {
 0 };
int size = PyUnicode_AsWideChar(PyDict_GetItem(conf, key), title, 1023);
Py_XDECREF(key);
printf("width=%d height=%d \n", width, height);
wprintf(L"title=%s\n", title);
Py_XDECREF(conf);
}
{

// Obtenir la classe
PyObject* TypePy = PyObject_GetAttrString(m, "TypePy");
if (!TypePy) {

throw exception("TypePy noe find!");
}
// Objet instantané équivalent à appeler un constructeur __init__ Passer les arguments du constructeur NULL
PyObject *obj = PyObject_CallObject(TypePy, NULL);
if (!obj) {

throw exception("obj not Create!");
}
// Appelez la fonction membre de la classe i(int) s(string)
PyObject *re = PyObject_CallMethod(obj, "test", "is", 2001, "c Para2");
cout << "PyObject_CallMethod return" << PyLong_AsLong(re) << endl;
Py_XDECREF(re);
// Accéder aux variables des membres
PyObject* var = PyObject_GetAttrString(obj, "id");
cout << "TypePy.id=" << PyLong_AsLong(var) << endl;
Py_XDECREF(var);
Py_XDECREF(obj);
Py_XDECREF(TypePy);
}
Py_XDECREF(m);
// Nettoyagepython
Py_Finalize();
}
catch (const std::exception&ex)
{

cout << ex.what() << endl;// Nettoyagepython
Py_XDECREF(m);
Py_Finalize();
}
getchar();
return 0;
}

Six、Résumé

  • Cet article présentec++AppelezpythonObjet d'Instanciation de classe pour accéder aux fonctions des membres et aux membres.
  • Si vous trouvez l'article utile,Je m'en souviens. - Oui.CollectionAvant Une vague,Les blogueurs soutiennent également la création de fonds d'écran dynamiques exclusifs pour les fans de fer~

Partage d'articles de qualité passés

  • C++ QTUnionFFmpegDéveloppement réel du lecteur vidéo-01Installation de l'environnement et déploiement du projet
  • RésolutionQTQuestions:Exécutionqmake:Project ERROR: Cannot run compiler ‘cl‘. Output:
  • Résoudre l'installationQTAprèsMSVC2015 64bitConfigurer sans problèmes de compilateur et de débogueur
  • QtKit tips inno complier set in kitEtno debugger,Résolution du problème avec un point d'exclamation jaune(MSVC2017)
  • Python+selenium Automatisation - Réaliser l'importation automatique、Téléchargement de fichiers externes(Ne pas éjecterwindowsFenêtre)

Partage de tutoriels de qualité

  • Si j'ai l'impression d'avoir fini de lire l'article,,Tu peux venir avec moi. Colonne Regarde ça.~
  • Par exemple, les colonnes suivantes:PythonApplet de commande de repas Wechat en direct、PythonQuantifier les transactions en direct、C++ QTProjets opérationnels Et Colonne d'apprentissage algorithmique
  • En savoir plusC++/PythonContenu pertinent!Cliquez directement sur la police de couleur ci - dessous pour sauter!
Guide d'apprentissage(Cliquez pour déverrouiller)Positionnement des connaissancesOrientation de la population🧡 PythonApplet de commande de repas Wechat en direct 🧡Classe supérieureCe cours estpython flask+Une combinaison parfaite d'applets Wechat,De la construction du projet au déploiement de Tencent Cloud en ligne,Créer un système de commande de repas complet.PythonQuantifier les transactions en directNiveau d'entréeLes poignées vous permettent de créer une extension facile、Plus sûr、Plus efficaceOpérations quantifiéesSystème️ C++ QTUnionFFmpegDéveloppement réel du lecteur vidéo️Difficile.Partager l'apprentissageQTSource du lecteur vidéo fini,Il faut être solideC++Connaissances! Communauté de 90 000 amateurs de jeuxAssistance mutuelle/Soufflez de l'eau.Communauté de 90 000 amateurs de jeux,Bavarder et s'entraider,Prix de la prostitution PythonBase zéro pour démarrer PythonDébutantPour les petits partenaires sans apprentissage systématique,L'objectif principal est de nous permettre d'apprendre rapidementPythonPour atteindre l'entrée

Informations sur la prostitution,Conseils chaleureux

Suivez les cartes ci - dessous pour en savoir plus sur la programmation,.Comprend divers matériels d'apprentissage des langues,Des milliers.PPTTemplates and various Game source Materials and other materials.Plus d'informations à consulter par vous - même!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved