[CPython] Object erstellen

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Donnerstag 23. September 2010, 16:09

Hallo...
Wie muss das ganze aussehen, um selbst definierte Typen (Klassen) innerhalb der C-API zu erstellen?
Mit einem simplem PyObject_New scheint das ganze zwar zu funktionieren, allerdings wird weder die "__new__" Funktion noch die "__init__" Funktion aufgerufen.
Wäre nett wenn mir da jemand genaueres sagen könnte.
Wenn ich versuche die "__new__" Funktion selber aufzurufen, scheitere ich daran, die richtigen Argument für die "args" und "kw" bereit zu stellen...

Gruß & Danke
Grüßle.
BlackJack

Donnerstag 23. September 2010, 16:55

@Chrisber: Ich weiss nicht ob ich Deine Frage richtig verstehe -- auf der einen Seite willst Du Typen erstellen auf der anderen klingt es danach dass Du einen Typ hast und ein Exemplar davon erstellen möchtest!? Letzteres sollte mit PyInstance_New() gehen.

Ich bin jetzt zu faul den anderen Thread hier noch einmal zu suchen: PyObject_Hash() suchst Du wohl auch. :-)
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Donnerstag 23. September 2010, 19:55

Hi.
Ja, sowas meinte ich. Den Typen habe ich bereits erfolgreich erstellt (also man kann aus Python heraus schon selber Instanzen erstellen), aber ich brauche das eben auch für die C-API.

Merci!

Gruß
Grüßle.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Donnerstag 23. September 2010, 20:54

Hi.
Mal eine Frage: Wie mache ich es richtig das Objekt wieder zu zerstören?
Sollte ich manuell tp_del aufrufen?

Gruß
Grüßle.
BlackJack

Donnerstag 23. September 2010, 23:40

@Chrisber: Um Himmels willen -- was ist denn wenn noch jemand eine Referenz darauf hält!? Du musst Dich nur in Deinem Code korrekt um den Referenzzähler kümmern.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Samstag 25. September 2010, 12:16

Chrisber hat geschrieben:Sollte ich manuell tp_del aufrufen?
`tp_del` löscht gar nix. Das ist der Destruktor, entspricht dem Python-`__del__`. Das wird nur dazu verwendet, Aufräumarbeiten und so weiter zu machen, und wird meist nicht benötigt. Du musst dich um das Aufräumen des Speichers (=Löschen von Objekten) gar nicht kümmern, wenn du mit den Refcounts alles richtig machst, kommt der GC schon irgendwann vorbei und schafft Platz.
Antworten