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