Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Node:
- emty_path = ' '
- parent_path = '│ '
- node_middle = '├─{}─'
- node_last = '└─{}─'
- def __init__(self, attribute):
- self.attribute = attribute
- self.children = {}
- def add_branch(self, attribute, subtree):
- self.children[attribute] = subtree
- def __eq__(self, other):
- return self.attribute == other
- def __repr__(self):
- if self.children:
- return f'A:{self.attribute+1}' # 1-index for easy reading
- return f'Class: {self.attribute}'
- def __str__(self, level=0, parent_levels=[], identifier='', last=False):
- """ Hard to read, but print looks real nice."""
- ret = [self.emty_path]*(level)
- for i in parent_levels:
- ret[i] = self.parent_path
- prefix = ''
- if level > 0:
- if last:
- prefix = self.node_last.format(str(identifier))
- else:
- prefix = self.node_middle.format(str(identifier))
- ret = ''.join(ret[:-1]) + prefix + repr(self) + '\n'
- if self.children:
- parent_levels.append(level)
- for i, (key, child) in enumerate(self.children.items(), start=1):
- if i == len(self.children): # Last child for node
- parent_levels.remove(level)
- ret += child.__str__(level+1, parent_levels,
- identifier=key, last=True)
- else:
- ret += child.__str__(level+1, parent_levels,
- identifier=key)
- return ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement