2011-03-15 3 views
1

J'essaie d'écrire un algorithme récursif pour générer une arborescence de dépendances de la hiérarchie d'héritage d'une classe. Voici mon exemple de code. Le problème que j'obtiens est quand nous les éléments dans la liste de bases sont plus qu'un, seulement le 1er élément de la liste et ses classes parentes sont imprimés. Je voudrais également générer un type de graphique montrant la hiérarchie d'héritage. Aide aimablement!générer une arborescence de dépendances de la hiérarchie d'héritage

Répondre

4

Le problème est ici:

for item in bases: 
    print item 
    return get_bases(item) 

Vous RECURSE dans l'élément, puis retourne immédiatement sans continuer à travers la boucle. Vous pouvez remplacer par quelque chose comme:

for item in bases: 
    print item 
    get_bases(item) 

ou vous pourriez peut-être construire une structure arborescente au lieu d'une impression ultérieure (pprint_node montre une implémentation possible):

class Node(object): 
    def __init__(self, item, children): 
     self.item = item 
     self.children = children 

def get_class_tree(klass): 
    bases = getattr(klass, '__bases__') 
    return Node(klass, [get_class_tree(item) for item in bases]) 

def pprint_node(node, level=0): 
    print (" "*level) + str(node.item) 
    for child in node.children: 
     pprint_node(child, level+1) 
+0

grâce @Owen, je l'espère « def Node 'supposé être' Node 'après l'exécution de la méthode get_class_tree, comment imprimer la structure arborescente générée par cette méthode? – shaz

+0

Oui, ça devrait être de la classe. Fixé. Également ajouté une méthode d'impression très simple, vous pouvez commencer. –

Questions connexes