[Python-de] rekursiver aufruf in klasse

Martin v. Loewis martin at loewis.home.cs.tu-berlin.de
Wed Aug 8 17:58:03 EDT 2001


> 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

Ganz anders. Ich würde auf das Dictionary ganz verzichten, und einen
"ordentlichen" Baum aufbauen:

class node:
     def __init__(self, id, parent = None):
         self.id = id
         self.parent = parent # Merke für jedes node-Objekt id und parent
         self.children = []
         if parent:
           parent.children.append(self)

Wenn man dann für einen Knoten alle Kinder haben will, muss man nicht
lange suchen: node.children ist genau die fertige Kinderliste.

Das globale Dictionary zu haben und viele Objekte ist doppelt
gemoppelt. Das globale Dictionary zu haben und eine getc-Klasse, die
lediglich die globale getchilds-Funktion nachbaut ist überflüssig.

Ciao,
Martin



More information about the Python-de mailing list