2014-01-31 32 views
0

我想初始化一个基本的堆栈 - 与推,弹出功能。 测试中出现问题。您会在代码中注意到我推送了2次,所以打印的堆栈应该显示为[5,5],而显示为None。我可以修改代码使其最终工作,但是我不会完全理解底层概念和我的方式的错误。所以我要求咨询和指点。 请查看这些代码并告诉我我做错了什么。初始化基本堆栈,但错误我不理解

这是与它的所有功能的类的代码,它被命名为stack_class

class Stack: 

    def __init__(self): 
     self._values = [] 
     print ('Stack initialized...') 
     return 

    def push(self, var): 
     ok = self._values.append(var) 
     return ok 

    def pop(self): 
     self.stack.pop() 

    def __str__(self): 
     output = "{0}".format(self.ok) 
     return output 

这是测试代码:

from stack_class import Stack 

ob_1 = Stack() 
ob_1.push(5) 
print(ob_1.push(5)) 
+0

另外,为什么每个构造函数通常都有一个空的return语句?它究竟返回了什么? – Amin

+1

他们不会,根本不是我的经验。在构造函数的结尾不需要一个空的'return'语句。简单的'return'语句返回'None'。正如简单地从一个函数的结尾落下一样。 –

回答

1

什么情况是,append方法不回报什么。

print [].append(1) 
>>> None 

它的工作,但不返回任何东西,这就是为什么你在可变ok越来越None。我想你想返回_values代替:

def push(self, var): 
    self._values.append(var) 
    return self._values 

输出:

Stack initialized... 
[5, 5] 

此外,这是我第一次读到空返约定。这不是必需的。

+0

谢谢你,我现在明白了。最后一个问题。我们是否需要使用self._values?为什么我们不能使用任何其他变量?如果有多个值要考虑呢?我试着用另一个变量,但代码不起作用。 – Amin

+0

你可以改变它,它不是mather。但**请记住**重新命名*出现“_values”的每个*名称。 – Christian