[Python-de] rekursiver aufruf in klasse

Frank Immich frankimmich at gmx.de
Wed Aug 8 16:31:30 EDT 2001


jetzt hat es geklappt....Danke 

> 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
> _______________________________________________
> Python-de maillist  -  Python-de at starship.python.net
> http://starship.python.net/mailman/listinfo/python-de
> 

-- 
Aufgepasst - jetzt viele 1&1 New WebHosting Pakete ohne
Einrichtungsgebuehr + 1 Monat Grundgebuehrbefreiung!
http://puretec.de/index.html?ac=OM.PU.PU003K00736T0492a




More information about the Python-de mailing list