生成继承层次的依赖树

1 投票
1 回答
655 浏览
提问于 2025-04-16 13:45

我正在尝试写一个递归算法,用来生成一个类的继承层级的依赖树。下面是我的示例代码。现在遇到的问题是,当基类列表中的元素超过一个时,只有列表中的第一个元素及其父类会被打印出来。

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 个回答

4

问题出在这里:

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

你在处理这个项目时进行了递归,但接着就立刻返回了,没有继续执行循环。你可以用类似下面的方式替换:

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)

撰写回答