C++ ObjectWrapper für Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

So wirklich hübsch ist das aber alles nicht. `PyArg_Parse()` zu benutzen, um den Typ zu überprüfen, ist ja einfach nur Missbrauch. Dafür gibt es `PyObject_TypeCheck()`, außerdem bringt da numpy `PyArray_Check()`mit. Davon abgesehen geben die ganzen PyArg*-Funktionen geliehene Referenzen bei Python-Objekten zurück, die darf man also nicht `Py_DECREF`en.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

`PyArg_Parse()` zu benutzen, um den Typ zu überprüfen, ist ja einfach nur Missbrauch.
Wieso? Was spricht dagegen? Ist doch extra für diesen Zweck vorgesehen.
booth
User
Beiträge: 44
Registriert: Mittwoch 31. Oktober 2007, 21:30
Wohnort: Durham, U.K.

Trundle hat geschrieben:So wirklich hübsch ist das aber alles nicht. `PyArg_Parse()` zu benutzen, um den Typ zu überprüfen, ist ja einfach nur Missbrauch. Dafür gibt es `PyObject_TypeCheck()`, außerdem bringt da numpy `PyArray_Check()`mit. Davon abgesehen geben die ganzen PyArg*-Funktionen geliehene Referenzen bei Python-Objekten zurück, die darf man also nicht `Py_DECREF`en.
Mag sein, dass das nicht ideal ist, aber es tut erstmal. Ich benutze 'PyArg_Parse()' nicht um den Typ zu ueberpruefen, oder? Vielleicht brauche ich es gar nicht, weil pValue ja schon ein numpy-Array ist. Eigentlich ein guter Punkt...

Die Sache mit dem Py_DECREF und Py_XDECREF, geliehenen Referenzen etc. Habe ich noch nicht durchschaut. Wie gesagt, ich habe mich da moeglichst an die Vorlagen von doc.python.org gehalten. Da stand, wenn man sich nicht sicher ist soll man Py_XDECREF nehmen und ich glaube das habe ich ueberall genommen (anscheind nicht ;) ). Mir ist die Funktion halt noch nicht so klar.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

In der Dokumentation steht: "It does remain a convenient way to decompose other tuples, however, and may continue to be used for that purpose." Es wird hier aber kein Tupel entpackt, sondern überprüft, ob ein Python-Objekt einen bestimmten Typ hat, und dafür ist es IMHO die falsche Funktion.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
booth
User
Beiträge: 44
Registriert: Mittwoch 31. Oktober 2007, 21:30
Wohnort: Durham, U.K.

Ueberprueft wird da eigentlich nichts, weil mit dem Rueckgabewert gar nichts gemacht wird. Ich habe das nur kopiert und nachtraeglich nicht angepasst. Urspruenglich wurde in Zeile 25 ein beliebiges PyObject zurueck gegeben und mit Zeile 29 wurde das PyObject dann in C++-Variablen geschrieben/zerlegt.

Wahrscheinlich brauche ich die Zeile 29 nicht mehr, weil ich ja weiss, dass ich nur ein numpy-Array zurueckgebe. Sogesehen koennte ich auch nur darauf testen und irgendwelche Fehlerbehandlungen (die es bisher ja noch gar nicht gibt) einbauen.
booth
User
Beiträge: 44
Registriert: Mittwoch 31. Oktober 2007, 21:30
Wohnort: Durham, U.K.

Ich habe das Programm mal abgeaendert. Die Zeile mit PyArg_Parse brauchte man tatsaechlich nicht und Py_XDECREF war auch falsch (ich weiss aber nicht warum :) ). Egal, nu tut's.

Nochmal vielen Dank fuer die Hilfe.
Antworten