让用户引用树结构的节点

时间:2014-05-19 00:00:34

标签: python serialization tree enumeration

我正在编写一个应用程序,它将分层数据存储在python类实例的树结构中。根节点将具有子列表,并且每个子节点也将在列表中具有其自己的子节点,依此类推。

用户需要以简单的方式直接在树形结构上操作。最简单的方法是枚举分层列表。

  1. 蜥蜴
  2. 水禽
  3. 因此,例如,如果用户想要在命令行中向Goose添加一些数据,则需要处理第2项子项1或2.1。

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

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

1 个答案:

答案 0 :(得分: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'