对于下面的stack
课程
class stack(list):
def __init__(self):
self.stack = []
self.top = -1
def isempty(self):
return self.stack == []
def push(self,x):
S.top = S.top + 1
return self.stack.append(x)
S = stack()
S.isempty() #True
S.push(5) #[5]
S.push(100) #[5,100]
print(S) # Returns empty stack []
为什么不返回更新的[5,100]
?
答案 0 :(得分:1)
您要问的问题是,您继承自list
,即使您没有尝试像列表那样行事。所有这一切都在造成混乱。特别是,您让list
超类定义了对象的显示方式,并且由于您从未执行self.append
之类的任何操作,只有self.stack.append
,这意味着它总是会显示为空列表。
修复后,您的对象将始终打印出以下内容:
<__main__.stack at 0x11d919dd8>
如果你想自定义它,你需要编写一个__repr__
方法,并决定你想要它的样子。
class stack:
def __init__(self):
self.stack = []
self.top = -1
def __repr__(self):
return f'<stack({self.stack})>'
def isempty(self):
return self.stack == []
def push(self,x):
S.top = S.top + 1
return self.stack.append(x)
您的代码中还有其他错误 - 您仍然有一个方法可以改变全局S
而不是self
,并且您将返回list.append
的结果,总是返回None
,可能还有更多 - 但这两个变化将共同解决您所询问的具体问题。