Thanks for the reply Steve, I solved it myself.I was not returning 'newest' Node in parent class.
--sudhier On Mon, 21 Sep 2015 11:43 pm Steven D'Aprano <st...@pearwood.info> wrote: > Hi Sudhier, and welcome, > > Unfortunately I'm about to step away from the computer, so I can't > really answer your question in detail, but since it's been 2 or 3 days > since you asked your question, and I haven't seen any replies at all, I > thought I'd give a quick reply so you know we aren't ignoring you. > > (My inbox is suffering from overload at the moment, so it is possible > that others have answered your question and I haven't noticed. If so, my > apologies for wasting everyone's time.) > > Regards, > > > Steve > > On Sat, Sep 19, 2015 at 07:52:07PM +0530, Sudhier Batara wrote: > > Hi, > > > > I have the below code which is a doubly linked list , which returns > > the Position of the node rather than the node itself.The code is quite > > self explanatory.In the below code i call following methods , > > > > p = L.add_last(8) > > print p.element() > > > > the above methods works fine adds the element into the List instance > > and also printing the element shows the element in the list. > > > > But when i call the below methods, > > > > q = L.add_after(p,5) > > q.element() > > > > throws following error > > > > > > _______________________________________ > > in make position > > in make position > > 8 > > inside validate > > 8 > > in make position > > Traceback (most recent call last): > > File "positional_dlist.py", line 128, in <module> > > print q.element() > > File "positional_dlist.py", line 45, in element > > return self._node.element > > AttributeError: 'NoneType' object has no attribute 'element' > > ____________________________________________________ > > > > Complete code below > > > > > > > > #!/usr/bin/python > > > > class _DoublelinkedBase: > > class _Node: > > def __init__(self,element,prev,Next): > > self.element = element > > self._prev = prev > > self._Next = Next > > > > def __init__(self): > > self._header = self._Node(None,None,None) > > self._trailer = self._Node(None,None,None) > > self._header._Next = self._trailer > > self._trailer._prev = self._header > > self._size = 0 > > > > def __len__(self): > > return self._size > > > > def is_empty(self): > > return self._size == 0 > > > > def _insert_between(self,element,predecessor,successor): > > newest = self._Node(element,predecessor,successor) > > predecessor._Next = newest > > successor._prev = newest > > self._size += 1 > > > > def _delete_node(self,node): > > predecessor = node._prev > > successor = node._Next > > predecessor._Next = successor > > successor._prev = predecessor > > element = node.element > > node.element = node._Next = node._prev = None > > self._size -= 1 > > > > class PositionalList(_DoublelinkedBase): > > class Position: > > def __init__(self,container,node): > > self._container = container > > self._node = node > > > > def element(self): > > return self._node.element > > > > def __eq__(self,other): > > return type(other) is type(self) and other._node is > self._node > > > > def __ne__(self,other): > > return not (other == self) > > > > def _validate(self, p): > > if not isinstance(p,self.Position): > > raise TypeError("p is not of type Position") > > if p._container is not self: > > raise ValueError("p is not the instance of this list") > > if p._node._Next is None: > > print p._node > > raise ValueError("No longer a valid node") > > print "inside validate" > > print p.element() > > return p._node > > > > def _make_position(self,node): > > if node is self._header or node is self._trailer: > > print "in make position for none" > > return None > > else: > > print "in make position" > > return self.Position(self,node) > > > > def first(self): > > return self._make_position(self._header._Next) > > > > def last(self): > > return self._make_position(self._trailer._prev) > > > > def before(self,p): > > node = self._validate(p) > > return self._make_position(node._prev) > > > > def after(self,p): > > node = self._validate(p) > > return self._make_position(node._Next) > > > > def __iter__(self): > > cursor = self.first() > > while cursor is not None: > > yield cursor.element() > > cursor = self.after(cursor) > > > > def _insert_between(self,e,predecessor,successor): > > #node = > > super(_DoublelinkedBase,self)._insert_between(e,predecessor,successor) > > node = > _DoublelinkedBase()._insert_between(e,predecessor,successor) > > return self._make_position(node) > > > > def add_first(self,e): > > return self._insert_between(e,self._header,self._header._Next) > > > > def add_last(self,e): > > return self._insert_between(e,self._trailer._prev,self._trailer) > > > > def add_before(self,p,e): > > original = self._validate(p) > > return self._insert_between(e,original._prev,original) > > > > def add_after(self,p,e): > > original = self._validate(p) > > return self._insert_between(e,original,original._Next) > > > > def delete_node(self,p): > > original = self._validate(p) > > return self._delete_node(original) > > > > def replace(self,p,e): > > original = self._validate(p) > > old_value = original.element > > original.element = e > > return old_value > > > > > > L = PositionalList() > > p = L.add_last(8) > > p = L.first() > > print p.element() > > q = L.add_after(p,5) > > print q.element() > > _______________________________________________ > > Tutor maillist - Tutor@python.org > > To unsubscribe or change subscription options: > > https://mail.python.org/mailman/listinfo/tutor > > > _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor