Seite 1 von 1

[CPython] Object erstellen

Verfasst: Donnerstag 23. September 2010, 16:09
von theliquidwave
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

Re: [CPython] Object erstellen

Verfasst: Donnerstag 23. September 2010, 16:55
von BlackJack
@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. :-)

Re: [CPython] Object erstellen

Verfasst: Donnerstag 23. September 2010, 19:55
von theliquidwave
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ß

Re: [CPython] Object erstellen

Verfasst: Donnerstag 23. September 2010, 20:54
von theliquidwave
Hi.
Mal eine Frage: Wie mache ich es richtig das Objekt wieder zu zerstören?
Sollte ich manuell tp_del aufrufen?

Gruß

Re: [CPython] Object erstellen

Verfasst: Donnerstag 23. September 2010, 23:40
von BlackJack
@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.

Re: [CPython] Object erstellen

Verfasst: Samstag 25. September 2010, 12:16
von Dauerbaustelle
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.