我正在尝试编写一个递归算法来生成类继承层次结构的依赖树。下面是我的示例代码。我遇到的问题是,当 bases 列表中的元素不止一个时,只会打印列表的第一个元素及其父类。
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)
我还想生成某种显示继承层次结构的图表。请帮忙!
问题出在这里:
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)
我是一名优秀的程序员,十分优秀!