让用户引用树结构的节点

2024-03-29 11:23:16 发布

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

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

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

  1. 蜥蜴
  2. 水禽

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

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

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


Tags: 数据实例方法命令行用户应用程序列表节点
1条回答
网友
1楼 · 发布于 2024-03-29 11:23:16
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'

相关问题 更多 >