don't confuse self with head in a Node class for a linked list or a tree
self is just used inside class to access non static methods and attributes for
this 'self' object you created
1) self.attribute=value
2) self.non_staticmethod()
# don't go on using self keyword itself inside the non static functions
# like in a linked list new=self instead of new=head
# one reason to present above argument is that using class A(object)
# functions can be made static and self is then not required at all
# although above argument has flaws but still just use self for those 2 purpose only
(opinion is subject to change in future)