Implement a queue class in Python Problem:Implement a queue class in Python: It should support 3 APIs:
  
  queue.top(): prints current element at front of queue
  
  queue.pop(): takes out an element from front of queue
  
  queue.add(): adds a new element at end of queue


class Queue:

    def __init__(self):
        """initialise a Queue class"""
        self.items = []
        self.index = len(self.items) - 1

    def top(self):
        """returns the current element at front of queue"""
        if self.items:
            return self.items[0]
        else:
            raise Exception("Empty Queue")

    def pop(self):
        """takes out an element from front of queue"""
        if self.items:
            self.items.pop(0)
        else :
            raise Exception("Empty Queue")

    def add(self , item):
        """adds a new element at the end of queue"""
        self.items.append(item)

    def __str__(self):
        """returns the string representation"""
        return str(self.items)

    def __iter__(self):
        """iterates over the sequence"""
        return self


    def __next__(self):
        """returns the next value in sequence"""
        if self.index == 0 :
            raise StopIteration
        self.index -= 1
        return self.items[self.index]




queue_1 = Queue()
queue_1.add(12)
queue_1.add(11)
queue_1.add(55)
queue_1.add(66)
queue_1.add(56)
queue_1.add(43)
queue_1.add(33)
queue_1.add(88)
queue_1.add(56)
queue_1.add(34)
iter(queue_1)
for i in queue_1:
    print i 
print queue_1
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()
print queue_1.top()
queue_1.pop()


The code works as intended and executes the 3 APIs specified in the problem . But it gives ""TypeError: instance has no next() method"" when i try to use next method to iterate over the values in queue. What am i missing in defining the next method?
I would have just inherited from the built-in collections.deque:

from collections import deque

class Queue(deque):
    def add(self, value):
        self.append(value)

    def top(self):
        return self[0]

    def pop(self):
        return self.popleft()