PyObject_New - Fragen

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.
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Hi.
Ich habe mal ein paar Fragen zu _PyObject_New.

1.) Ist es nötig, nach _PyObject_New noch die Funktion PyObject_Init aufzurufen?
2.) Muss ich einen Incref auf dem Objekt ausführen?
3.) Wie übergebe ich die Parameter, die die __init__ Funktion meiner Klasse annimmt?

Momentan sieht mein Code so aus:

Code: Alles auswählen

	PyObject *pyInstance = _PyObject_New(&this->m_pyType);
	pyInstance = PyObject_Init(pyInstance, &this->m_pyType);
Ich müsste aber eigentlich auch Parameter übergeben können :/

Gruß
Grüßle.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

1. Nein, _PyObject_New() ruft die Funktion selbst auf.
2. Nach _PyObject_New()? Der "Reference count" ist nach Aufruf bei 1, also nein, sofern du natürlich nicht entsprechende andere Referenzen erstellst. Kann aber auch sein, das ich mich hier irre (Aber standardmässig INCREF aufrufen zu müssen wäre doch auch ein recht unglücklich).
3. Du müsstest eigentlich die Funktion tp_call des Type Objektes aufrufen, um eine neue Instanz automatisch erzeugen zu lassen (Dh, das Äquivalent zu "MyClass(a, b)" bzw "MyClass.__call__(a, b)"). Schau dir mal type_call() in Objects/typeobject.c an, das ist die Standardimplementation (von __call__() bzw tp_call) von Type, welche eine neue Instanz erzeugt. Ich glaube nicht, das du da noch mit PyObject_New() etc hantieren musst.
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Perfekt. Danke :)
Dennoch stürzt die DLL (also das Programm) ab, sobald ich _PyObject_New aufrufe. Woran könnte da liegen :/?

Habe nun alles so im Code umgesetzt wie du es gesagt hast.

Gruß
Grüßle.
Antworten