Seite 1 von 1

PyObject_New - Fragen

Verfasst: Samstag 28. November 2009, 17:01
von theliquidwave
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ß

Verfasst: Samstag 28. November 2009, 19:24
von str1442
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.

Verfasst: Samstag 28. November 2009, 21:49
von theliquidwave
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ß