[Python-de] rekursiver aufruf in klasse

Rene Liebscher R.Liebscher at gmx.de
Wed Aug 8 15:59:59 EDT 2001


Georg Mischler wrote:
> 
> Frank Immich wrote:
> 
> > Hallo zusammen , ich bräuchte ein wenig Nachhilfe in Bezug auf Klassen.
> > Verwenden und selber schreiben ist doch ein Unterschied...
> > Wie realisiere ich einen rekursiv Aufruf in einer Klasse. Beispiel :
> > Ich habe ein Dictionary mit jeweils (child:parent , child:parent.....). Das
> > ganze ist verschachtelt.
> > Die Funktion ist ganz einfach:
> >
> > ...
> >
> > Wie macht man das als Klasse ????
> > Mein Versuch ist bis jetzt :
> >
> > class getc:
> >     def __init__(self):
> >         self.idlist =[]
> >         self.dic = dic
> >     def getid(self, id):
> >         self.id = id
> >         for child,parent in self.dic.items():
> >                     if parent == self.id:
> >                             self.idlist.append(child)
> >                             self.getid(child)
> >         return self.idlist
> >
> > Das klappt aber nicht...läuft immer nur einmal durch.
> > Leider steige ich durch diese ganze Namesraumgeschichte nicht durch.
> >
> 
> Ich sehe keinen funktionalen Unterschied zwischen getchilds()
> und getid() (die Zuweisung "self.id = id" ist ueberfluessig, hat
> aber sonst keinen negativen Einfluss).
> 
> Ich vermute daher, dass das Problem eher darin liegt, wie und
> wann das globale dic und das lokale self.dic zu ihrem Inhalt
> kommen. Koennte es sein, dass du zuerst eine Instanz von getc
> initialisierst, und danach dem globalen dic mit "dic = xxx"
> einen neuen Wert zuordnest?
> 
> Grundsaetzlich scheint dein Verstaendnis von Klassen in Ordnung,
> du musst nur aufpassen, wann du welche Instanz-Attribute zuweist.
> So werden z.B. bei einem wiederholten Aufruf von getid() die
> zusaetzlichen IDs weiterhin an die alte idlist angehaengt, du
> kriegst also jedesmal ein kumuliertes Resultat. Das kann genau
> das sein, was du haben willst, oder auch nicht... Wenn du jedes
> mal eine frische idlist brauchst, dann muesstest du aufgrund der
> rekursiven Struktur beim aufruf von getid() noch ein optionales
> Initialisierungsflag einbauen.
> 
> -schorsch
> 
Ich sehe das Problem bei der Anweisung self.id = id in der
Rekursion. Denn self.id wird bei der Rueckkehr aus der
Rekursion stellt das vorherige self.id nicht wieder her.
Wenn man diese Zeile weglaesst und parent direkt gegen id
testet sollte eher was sinnvolles herauskommen.

MfG
Rene Liebscher



More information about the Python-de mailing list