2025-02-23 16:46:37 +08:00
|
|
|
from anytree import RenderTree
|
|
|
|
|
|
|
|
from anytree.node.nodemixin import NodeMixin
|
|
|
|
from anytree.node.util import _repr
|
|
|
|
|
|
|
|
|
2025-02-24 21:38:31 +08:00
|
|
|
class NodeTree(NodeMixin):
|
2025-02-23 16:46:37 +08:00
|
|
|
def __init__(self, name, parent=None, children=None, **kwargs):
|
|
|
|
self.__dict__.update(kwargs)
|
|
|
|
self.name = name
|
|
|
|
self.prop = ""
|
|
|
|
self.parent = parent
|
|
|
|
if children:
|
|
|
|
self.children = children
|
2025-02-24 21:38:31 +08:00
|
|
|
self.seq_node = []
|
2025-02-23 16:46:37 +08:00
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
args = ["%r" % self.separator.join([""] + [str(node.name) for node in self.path])]
|
|
|
|
return _repr(self, args=args, nameblacklist=["name"])
|
2025-02-22 16:50:16 +08:00
|
|
|
|
2025-02-23 16:46:37 +08:00
|
|
|
def set_seq_prop(self, index, prop):
|
|
|
|
self.seq_node[index].prop = prop
|
|
|
|
|
2025-02-22 16:50:16 +08:00
|
|
|
def print(self):
|
|
|
|
treestr = ""
|
2025-02-24 21:38:31 +08:00
|
|
|
for pre, fill, node in RenderTree(self):
|
2025-02-23 16:46:37 +08:00
|
|
|
treestr += f"{pre}{node.name} {node.prop}\n"
|
2025-02-22 16:50:16 +08:00
|
|
|
print(treestr)
|