让用户引用树结构的节点

2022-07-06 11:40:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个应用程序,它将层次数据存储在python类实例的树结构中。根节点将有一个子节点列表,每个子节点也将有自己的子节点,以此类推。你知道吗

用户需要以一种简单的方式直接对树结构进行操作。最简单的方法是枚举层次列表。你知道吗

  1. 蜥蜴
  2. 水禽

因此,例如,如果用户想在命令行中向Goose添加一些数据,他们需要处理第2项、第1子项或第2.1子项。你知道吗

维护这些树节点实例的可访问引用的最佳方法是什么?你知道吗

每个节点都有一个时间戳和uuid。问题是每次程序运行都必须序列化和反序列化。我们将按时间戳排序,但我只是有点不确定如何进行枚举,是应该动态执行还是存储在树结构中。你知道吗


Tags: 数据实例方法命令行用户应用程序列表节点序列化方式时间树结构蜥蜴子项水禽
1条回答
网友
1楼 ·
class Node:

    def __init__(self, name):
        self.name = name
        self.parent = None
        self.children = []

    def __repr__(self):
        return self.name

    def add_node(self, child):
        child.set_parent(self)
        self.add_child(child)

    def get_node(self, pos):
        try:
            return self.children[pos]
        except IndexError:
            raise ValueError('Node does not exist')

    def access(self, string):
        node = self
        for i in map(lambda i: int(i)-1, string.split('.')):
            node = node.get_node(i)
        return node

    def set_parent(self, parent):
        self.parent = parent

    def add_child(self, child):
        self.children.append(child)

>>> n = Node('Root')
>>> l = Node('Lizards')
>>> w = Node('Waterfowls')
>>> g = Node('Goose')
>>> n.add_node(l)
>>> n.add_node(w)
>>> w.add_node(g)
>>> n.access('1')
'Lizards'
>>> n.access('2')
'Waterfowls'
>>> n.access('2.1')
'Goose'
>>> w.access('1')
'Goose'