生成继承层次结构的依赖关系树

时间:2011-03-15 19:19:04

标签: python inheritance recursion

我正在尝试编写递归算法来生成类的继承层次结构的依赖关系树。以下是我的示例代码。我得到的问题是,当我们基础列表中的元素不止一个时,只打印列表的第一个元素及其父类。

def get_bases(klass):
   bases = getattr(klass, '__bases__')
   if len(bases) == 0:
      return None
   else:
      for item in bases:
        print item
        return  get_bases(item)

我还想生成一种显示继承层次结构的图表。请帮忙!

1 个答案:

答案 0 :(得分:4)

问题在于:

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)