TypeError:enqueuqe占用1个位置参数,但传递了2个

时间:2012-10-18 02:33:23

标签: python python-3.x

只传递一个参数。我仍然得到2个参数已经通过的错误。 headtail未初始化为-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())

1 个答案:

答案 0 :(得分:4)

您的代码存在一些问题。

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

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

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

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

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