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.
ich habe mal den Beispielcode aus dem Python-Tutorial hier genommen. Kann mir jemand erklären wieso vor dem hinzufügen des Typs zum Modul ein Py_INCREF(&noddy_NoddyType); durchgeführt wird? Ist das dazu da, dass wenn man eine Instanz des Typens/Klasse erzeugt hat und jemand dann das Modul entfernt, noch immer eine Referenz auf den Typen existiert oder was soll das??
also ich hab's jetzt so verstanden, das ich mir damit erst mal einen Referenzcount erzeuge der 1 ist und das mir PyModule_AddObject() eine Referenz darauf klaut, so dass wenn das Objekt entfernt wird er den Refcount dekrementiert ohne ihn vorher inkrementiert zu haben. So wird er dann 0
Exakt. Der Sinn der Sache ist, dass ``PyModule_AddObject()`` normalerweise auf Objekte angewandt wird, die gerade erzeugt worden sind, z.B. mit ``PyString_FromString()``. In dem Fall gehört dir die neue Referenz auf dieses Objekt, und wenn ``PyModule_AddObject()`` sie dir nicht "abnehmen" würden, müsstest du jeweils ``Py_DECREF()`` darauf aufrufen. Ein statisches Type-Objekt ist da eine Ausnahme, da es eben nicht erzeugt wird, sondern "schon da" ist (nämlich durch seine Initialisierung), und noch keinen Reference Count hat.
Dieses Verhalten (Stehlen von Referenzen) ist übrigens die große Ausnahme; es muss in der Doku immer explizit angegeben sein.