создать дерево зависимостей иерархии наследования - PullRequest
1 голос
/ 15 марта 2011

Я пытаюсь написать рекурсивный алгоритм для генерации дерева зависимостей иерархии наследования класса.Ниже приведен мой пример кода.Проблема, которую я получаю, состоит в том, что когда у нас больше одного элемента в списке баз, печатаются только первый элемент списка и его родительские классы.графика, показывающего иерархию наследования.Пожалуйста, помогите!

1 Ответ

4 голосов
/ 15 марта 2011

Проблема здесь:

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

Вы вернетесь в предмет, а затем сразу же вернете без продолжения цикла for .Вы можете заменить что-то вроде:

for item in bases:
    print item
    get_bases(item)

или, возможно, вместо этого вы можете построить древовидную структуру для последующей печати (pprint_node показывает одну возможную реализацию):

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...