2012-10-18 47 views
2

只传递一个参数。仍然我收到2个参数已被传递的错误。 headtail未被初始化为-1。TypeError:enqueuqe需要1个位置参数,但通过了2个

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

您的代码有几个问题。

直接导致你的错误的是你没有给你的方法一个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上分配值作为值,你就可以全部设置。

相关问题