好的,所以我要疯了,这是一个用户定义的类,在python中为一个赋值创建一个Stack,除了pop方法之外,它看起来应该对我有用。
class Stack(object):
def __init__(self):
self.s1 = []
def __len__(self):
return(len(self.s1))
def push(self, item):
self.s1.append(item)
def pop(self):
return self.s1.pop()
def isEmpty(self):
return len(self.s1) == 0:
def __repr__(self):
return repr(self.s1)
s = Stack()
s.push('plate 1')
s.push('plate 2')
s.push('plate 3')
print(s)
print(len(s))
print(s.pop)
print(s.pop)
print(s.pop)
print(s.isEmpty())
当它运行3次打印(s.pop)调用时,它只打印<bound method Stack.pop of ['plate 1', 'plate 2', 'plate 3']>
而不是应该弹出的项目,它不会从堆栈中删除它。我做错了什么?
答案 0 :(得分:2)
pop
本身就是一种方法。如果您想调用方法pop
,则必须在()
中包含参数:
s.pop()
请注意,在这种情况下,您不会在()
中包含任何内容,因为它不期望参数(self
隐式传递)。
答案 1 :(得分:2)
你没有调用pop函数:
print(s.pop)
应改为:
print(s.pop())
你正在做的只是返回pop函数对象。在控制台中试试这个:
>>> a
[1, 2, 3]
>>> a.pop
<built-in method pop of list object at 0x10656fe60>
>>> a
[1, 2, 3]
正如您所看到的,列表的内容保持不变,因为我们没有调用该函数。