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.
Hatte zunächst den Verdacht das es an der parent/child zirkulär Referenzierung liegt, aber selbst wenn ich die parent Referenzierung im child aus kommentiere habe ich das gleiche Ergebnis.
die lösung ist im grunde das ich die klassenattribute zur laufzeit beim instanzieren explizit noch mal initialisieren muss.
das schein etwas python spezifisches zu sein das ich nicht wusste. in vb, c# ist das nicht so und in c++ wirst du dazu gezwungen.
man lernt nie aus.
momentan funzt das ohne weakref bei mir. muss ich mal genau schauen ob ich mir dadurch nen memory leak einbauen und die gc das object wegen der zirkulär referenzierung nicht löschen kann. dann muss ich doch den umweg über weakref gehen.
@D503: Du musst nicht Klassenattribute "nochmal" initialisieren sondern Instanzattribute verwenden. Und das ist in VB, C#, und C++ genau so!
Es ist ein grosser Unterschied ob Du ein Objekt an die *Klasse* bindest, oder an jedes einzelne Exemplar.
Falls dieser `C`-Präfix für Klasse stehen soll, dann lass den bitte weg. Klassen sind normalerweise das Einzige was mit in Python in "MixedCase"-Schreibweise benennt, also ist ein zusätzlicher "Typpräfix" unnötig und verwirrt nur. Für alles andere ausser Konstanten ist übrigens Kleinbuchstaben und Unterstriche üblich, also `print_children()` statt `printChildren()`.
Speicherlecks gibt es bei zirkulären Objektreferenzen nicht, solange man nicht anfängt auf den Objekten `__del__()`-Methoden zu implementieren. Das sollte man aber sowieso nicht tun, solange man reine Python-Klassen schreibt.