node.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # vim: set fileencoding=utf-8 :
  2. class Node(object):
  3. def __init__(self, value, *nodes):
  4. super(Node, self).__init__()
  5. self.value, self.nodes = value, list(nodes)
  6. self.is_leaf = False
  7. def __getitem__(self, n):
  8. return self.nodes[n]
  9. def __setitem__(self, n, node):
  10. self.nodes[n] = node
  11. def __iter__(self):
  12. return iter(self.nodes)
  13. def __len__(self):
  14. return len(self.nodes)
  15. def __eq__(self, node):
  16. return isinstance(node, Node) \
  17. and self.value == node.value and self.nodes == node.nodes
  18. #def __repr__(self):
  19. # return repr(self.value)
  20. def __str__(self):
  21. return '<Node value=%s nodes=%s>' % (str(self.value), str(self.nodes))
  22. def title(self):
  23. return str(self.value)
  24. class Leaf(Node):
  25. def __init__(self, value):
  26. super(Leaf, self).__init__(value)
  27. self.value = value
  28. self.nodes = None
  29. self.is_leaf = True
  30. def __len__(self):
  31. return len(str(self.value))
  32. def __repr__(self):
  33. return repr(self.value)
  34. def __str__(self):
  35. return str(self.value)