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

Ich habe einen Tree:

Code: Alles auswählen

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
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

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

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: Alles auswählen

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

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

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.
Antworten