2

只传递了一个参数。我仍然收到 2 个参数已通过的错误。head并且tail没有被初始化为-1。

class Queue_demo:
    head=-1
    tail=-1
    a=[]

    def enqueue(data=10):
        if(head==-1 and tail==-1):
            head=head+1
            tail=tail+1
            a.append(data)
        else:
            tail=tail+1
            a.append(data)

    def dequeue():
        y=a[head]
        if(head==tail):
            head,tail=-1,-1
        else:
            head=head+1
        return y

q1=Queue_demo()
q2=Queue_demo()
q1.enqueue(12)

while(q1.tail==-1):
    print(q1.dequeue())
4

1 回答 1

4

您的代码存在一些问题。

直接导致你的错误的是你没有给你的方法一个self参数。当您调用q1.enqueue(12)Python 时,它会将其转换为Queue_demo.enqueue(q1, 12). 正在调用该方法的对象作为第一个参数传递给该方法。按照惯例,它通常被命名为self.

这导致我遇到第二个问题,一旦您通过错误数量的参数错误。您的实例都将共享同一组数据成员,因为它们当前正在访问类变量和head,而不是实例变量。这将非常令人困惑,因为将一个项目添加到一个队列会使其也出现在所有其他队列中。taila

为了解决这个问题,您要做的是在构造函数中创建这些变量(它只是一个名为 的方法__init__),而不是在类定义中定义它们。您的__init__方法可能如下所示:

def __init__(self):
    self.head = -1
    self.tail = -1
    self.a = []

请记住,Python 通常与其他编程语言不同!您不需要声明您的成员变量,只需开始将事物作为值分配self,您就可以完成所有设置。

于 2012-10-18T03:36:05.773 回答