Python对象绑定方法

时间:2015-09-03 08:50:56

标签: python

我做了这个堆栈程序:

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>>。我无法弄清楚我做错了什么。

2 个答案:

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