for iteration über array und nicht ueber gesamten tree

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.
rinix
User
Beiträge: 2
Registriert: Montag 26. Januar 2009, 23:42

for iteration über array und nicht ueber gesamten tree

Beitragvon rinix » Dienstag 27. Januar 2009, 00:06

Ich habe einen Tree:

[code=]def path(object):
name = ""
childs[] # liste von path objecten

def add_path(self, name):
for c in self.childs:
if c.name == name:
return c[/code]

add_path soll die liste der objecte nach einem bestimmten namen durchsuchen, aber nicht in die Tiefe iterieren, wie es sie im Moment tut.
Wie kann ich ich das iterieren verhindern?

Danke schon mal fuer euer hilfe.
BlackJack

Beitragvon BlackJack » Dienstag 27. Januar 2009, 07:54

Bitte zeige möglichst minimalen Quelltext der lauffähig ist und das Problem demonstriert.

Ich rate trotzdem mal: Sofern das erste ``def`` vielleicht ein ``class`` sein sollte, und bei `childs` ein Gleicheitszeichen fehlt und das tatsächlich auf Klassenebene definiert wird, liegt vielleicht genau da dein Problem. Dann ist das nämlich, genau wie `name`, ein Klassenattribut, welches sich alle Exemplare dieser Klasse teilen.
rinix
User
Beiträge: 2
Registriert: Montag 26. Januar 2009, 23:42

Beitragvon rinix » Dienstag 27. Januar 2009, 15:05

Sorry das kommt davon wenn man mal nicht copy and paste macht. :-)

Habs gerade selber geloesst bekommen, ... und mal fuers Archiv, das Problem war nicht die iteration des for wie ich dachte, das Problem lag darin das in der init keine Lehre liste zugewiesen wird, und daher bei der instanzierung nur der pointer auf die leere Liste kopiert wurde anstatt eine neue leere Liste anzulegen.


[code=]class Path(object):
name = ""
childs = []
father = None

def __init__(self, name, father, isprivate, isuseable):
self.childs = [] # diese Zeile hat gefehlt
self.name = name[/code]
BlackJack

Beitragvon BlackJack » Dienstag 27. Januar 2009, 19:22

Dann solltest Du die Attribute auf Klassenebene vielleicht besser ganz entfernen. `name` und `childs` machen da keinen Sinn wenn sie sowieso von `__init__()` auf dem Exemplar gesetzt werden.

Wer ist online?

Mitglieder in diesem Forum: __deets__