Python pop()的行为不符合预期

时间:2014-04-18 01:41:12

标签: python stack pop

好的,所以我要疯了,这是一个用户定义的类,在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']>而不是应该弹出的项目,它不会从堆栈中删除它。我做错了什么?

2 个答案:

答案 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]

正如您所看到的,列表的内容保持不变,因为我们没有调用该函数。