即使搜索许多类似的问题,我也找不到如何在python中创建递归类的树结构(将分支添加到根部(。也许有人可以建议为什么这种类型的代码在Python中不起作用,以及如何正确编写?
import copy
class Tree:
children = []
def add_child(self, child):
self.children.append(copy.deepcopy(child))
level1 = Tree()
child_level2 = Tree()
child_level3 = Tree()
child_level2.add_child(child_level3)
print('After adding level 3 to level 2 children number is {}'.format(len(child_level2.children)), child_level2.children)
level1.add_child(child_level2)
print('After adding level 2 to level 1, level 1 children number is {} but expecting expecting to have 1 child'.format(len(level1.children)), level1.children)
print('After adding level 2 to level 1, level 2 children number is {} but expecting expecting to have 1 child'.format(len(level1.children[0].children)),level1.children[0].children)
P.S。Anytree库可用于创建此结构,但很难在整个项目中调整它。
您的类没有构造函数,因此所有对象共享了相同的列表。这是正确的python语法:
class Tree:
def __init__(self):
self.children = []
def add_child(self, child):
self.children.append(copy.deepcopy(child))
显示类变量与实例变量的示例:
class Tree1:
class_children = []
def __init__(self):
self.children = []
node1 = Tree1()
node2 = Tree1()
child = Tree1()
node1.children.append(child)
node1.class_children.append(child)
print('node1 children length: {}'.format(len(node1.children))) # 1
print('node2 children length: {}'.format(len(node2.children))) # 0
print('node1 class_children length: {}'.format(len(node1.class_children))) # 1
print('node2 class_children length: {}'.format(len(node2.class_children))) # 1
类似的东西?这保留了add_child函数。
class Tree:
def __init__(self):
self.children = []
def add_child(self, child):
self.children.append(child)
level1 = Tree()
level2 = Tree()
level1.add_child(level2)
level3 = Tree()
level2.add_child(level3)
print('After adding level 2 to level 1, level 1 children number is {} but expecting expecting to have 1 child'.format(len(level1.children)), level1.children)
print('After adding level 2 to level 1, level 2 children number is {} but expecting expecting to have 1 child'.format(len(level1.children[0].children)),level1.children[0].children)