我做了这个堆栈程序:
class Stack(object):
def __init__(self):
self.items = []
def empty(self):
return self.items == []
def push(self, item):
return self.items.append(item)
def pop(self):
return self.items.pop()
def Items(self):
print self.items
当我尝试stack.empty
时,它会显示<bound method Stack.empty of <__main__.Stack object at 0x01C437B0>>
。我无法弄清楚我做错了什么。
答案 0 :(得分:5)
您只是忘了调用方法:
stack.empty()
如果您必须将其作为属性使用,请使用property
object:
@property
def empty(self):
return self.items == []
你可以在这里使用not
,在布尔上下文中空容器被认为是假,如果容器是空的,not self.items
会产生True
:
@property
def empty(self):
return not self.items
演示(没有property
演示方法):
>>> class Stack(object):
... def __init__(self):
... self.items = []
... def empty(self):
... return not self.items
... def push(self, item):
... return self.items.append(item)
... def pop(self):
... return self.items.pop()
...
>>> stack = Stack()
>>> stack.empty
<bound method Stack.empty of <__main__.Stack object at 0x10211c090>>
>>> stack.empty()
True
>>> stack.push('foo')
>>> stack.empty()
False
>>> stack.pop()
'foo'
>>> stack.empty()
True
答案 1 :(得分:2)
在将empty
定义为方法时,您需要使用()
或.__call__()
来调用它,否则您可以使用python的整洁&#34;属性&#34;功能,只需修改你的代码:
@property
def empty(self):
return self.items == []
然后您可以将此方法作为属性self.empty
有关更多信息,请转到https://docs.python.org/2/library/functions.html#property