FIFO中的FIFO出列“AttributeError:Queue实例没有属性'front'?

时间:2013-11-05 21:50:05

标签: python fifo

我正在寻找一个功能(不一定非常有效,因为我是编程的新手)FIFO队列,并且我的出队有问题。

我的代码如下所示:

class QueueNode:
    def __init__(self, data):
        self.data = data
        self.next = None 

    def __str__(self):
        return str(self.data) 

class Queue:
    def __init__(self):
        self.front = None
        self.rear = None
        self.size = 0

    def enqueue(self, item):
        newnode = QueueNode(item)
        newnode.next = None
        if self.size == 0:
            self.front = self.rear = newnode
        else:
            self.rear = newnode
            self.rear.next = newnode.next
        self.size = self.size+1

    def dequeue(self):
        dequeued = self.front.data
        del self.front
        self.size = self.size-1
        if self.size == 0:
            self.rear = None
        print self.front #for testing

如果我执行此操作并将项目出列,我会收到错误“AttributeError:Queue instance is no attribute'front'。”我想我的功能没有正确分配队列的新前端?我不知道如何修复它。

我真的不想从头开始,所以如果对我的代码进行调整可以工作,我更喜欢 - 我不是试图最小化运行时间,只是为了感受类和那种性质的东西。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

问题在于这一行:

del self.front

这会从front中删除(“删除”)self属性。因此,当您稍后尝试print self.front几行时会出现错误。再也没有self.front这样的东西了。

答案 1 :(得分:1)

您还删除了属性self.front,然后再次尝试访问它。

del self.front

print self.front #for testing # you are tying to use self.front but you removed it

您在某些功能结束时缺少:

def dequeue(self):  # <- missing that :

我不确定您的意图是什么,但self.front是变量,它没有属性data

dequeued = self.front.data # remove the data

您还错过了def__init__

之间的空格
def__init__(self):