python中的FIFO取消排队"属性错误:队列实例没有属性'front'?



我希望制作一个功能性(不一定是最佳效率,因为我对编程很陌生)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

如果我这样做,并将一个项目取消排队,我会收到错误"属性错误:队列实例没有属性'front'"。我想我的函数没有正确分配队列的新前端?不过我不确定如何解决它。

我真的不想从头开始,所以如果对我的代码进行任何调整可以工作,我更喜欢这样 - 我不想最小化运行时,而只是想感受一下类和这种性质的东西。

提前感谢任何帮助。

问题是这一行:

del self.front

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

还将删除该属性,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):

最新更新