只传递一个参数。我仍然得到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())
答案 0 :(得分:4)
您的代码存在一些问题。
直接导致错误的是你没有给你的方法self
参数。当您致电q1.enqueue(12)
时,Python会将其转换为Queue_demo.enqueue(q1, 12)
。调用该方法的对象作为第一个参数传递给该方法。按照惯例,它通常被命名为self
。
这让我想到了一旦你错过了错误的参数数量就会遇到的第二个问题。您的实例将共享同一组数据成员,因为它们当前正在访问类变量head
,tail
和a
,而不是实例变量。这将非常令人困惑,因为将项目添加到一个队列也会使其出现在所有其他队列中。
要解决这个问题,您要做的是在构造函数中创建这些变量(这只是一个名为__init__
的方法),而不是在类定义中定义它们。以下是__init__
方法可能的样子:
def __init__(self):
self.head = -1
self.tail = -1
self.a = []
请记住,Python通常与其他编程语言不同!您不需要声明您的成员变量,只需在self
上开始将事物分配为值,您就可以全部设置。