在Python中与孩子一起创建递归阶级树



即使搜索许多类似的问题,我也找不到如何在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)

最新更新