我无法理解python中的对象操作
我尝试使用下面的代码实现一个使用2个堆栈的队列 实用程序堆栈实现我无法理解python中的对象操作,python,class,object,recursion,Python,Class,Object,Recursion,我尝试使用下面的代码实现一个使用2个堆栈的队列 实用程序堆栈实现 class Stack(): def __init__(self,array = []): self.array = array def is_empty(self): return self.array == [] def pop(self): if self.array == []: raise Exception('stack
class Stack():
def __init__(self,array = []):
self.array = array
def is_empty(self):
return self.array == []
def pop(self):
if self.array == []:
raise Exception('stack is empty')
else:
popped_element = self.array.pop()
return popped_element
def push(self,key):
self.array.append(key)
def top(self):
return self.array[-1]
def __repr__(self):
return " ".join(list(map(str,self.array)))
if __name__ == "__main__":
q = Stack()
q.push(1)
q.push(2)
q.push(3)
q.push(4)
q.push(5)
print(q.pop())
print(q.pop())
print(q.pop())
q.push(10)
print(q)
当我试图对队列执行上述操作时,我的代码陷入无限递归,因为堆栈的pop操作不起作用。
有人能帮我弄清楚为什么我的代码(队列操作:-q.dequeue())陷入无限递归吗?
谢谢。问题在于,由于使用了 换句话说,由于默认情况下可以初始化堆栈的数组是空列表,因此任何将来的实例都不会只使用空列表,而是使用与所有以前的堆栈实例相同的列表 尝试以下快速修复方法:
class Stack():
def __init__(self,array=None):
self.array = array or []
...
这回答了你的问题吗?请允许我评论一下,您的堆栈只不过是一些函数的重新实现列表(它们不是数组)已经有了。@KlausD。感谢链接,它解决了我的问题。我完全知道Stack类只不过是列表的append和pop函数。我创建这个类是因为我想有一个类似于其他语言中堆栈的抽象。
class Stack():
def __init__(self,array=None):
self.array = array or []
...