我正在尝试编写递归算法来生成类的继承层次结构的依赖关系树。以下是我的示例代码。我得到的问题是,当我们基础列表中的元素不止一个时,只打印列表的第一个元素及其父类。
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)
我还想生成一种显示继承层次结构的图表。请帮忙!
答案 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)