[Python-de] rekursiver aufruf in klasse

Frank Immich frankimmich at gmx.de
Wed Aug 8 16:11:24 EDT 2001


Danke erst mal  für die Antwort....
Der Aufbau ist:

dic ={.....}

class getc:
       .......
       def getid(..)

if __name__== '__main__':
   a = getc()
   list = a.getid(id) 
   print list 

Was stimmt daran nicht ???
Danke für Tipps...
Ciao Frank 
PS. Der "kumulierte" Output ist gewollt 


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.....).
> D
> as
> > ganze ist verschachtelt.
> > Die Funktion ist ganz einfach:
> >
> > dic = {.......}
> > idlist =[]
> > def getchilds(id):
> > 	for child,parent in dic.items():
> > 		if parent == id:
> > 			idlist.append(child)
> > 			getchilds(child)
> > 	return idlist
> >
> > print getchilds(id_no)
> >
> > 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
> 
> -- 
> Georg Mischler  --  simulations developer  --  schorsch at schorsch.com
> +schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/
> 
> _______________________________________________
> 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