2017-02-05 109 views
0

我正在阅读Zed Shaw的“Learning Python the Hard Way”,并且正在研究练习题38.我遇到了关于函数如何在Python中工作的小节以及我坚持在他的例子,如下图所示:学习Python的难题:练习38(函数如何在Python中工作)

$ python 
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits", or "license" for more information. 
>>> class Thing(object): 
... def test(hi): 
...   print "hi" 
... 
>>> a = Thing() 
>>> a.test("hello") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: test() takes exactly 1 argument (2 given) 
>>> 

末读的解释后,捷思锐解释说,Python的改变a.test(“你好”),测试(一,“你好”),并在某个地方有人搞砸了,并没有添加一个论点。

有人会更好地向我解释这个概念吗?我不太明白什么是需要“添加一个论点”。如果有人向我解释这个错误,将不胜感激。谢谢。

+2

供参考:http://sopython.com/wiki/LPTHW_Complaints。你在发布的代码中缺少的东西是当前实例的'self'参数(该方法不需要,它暗示它实际上不应该是一个实例方法)。 – jonrsharpe

+1

事实上,你必须阅读第38章,并且现在才了解函数 - 编程的基本构建块之一 - 应该让你了解为什么不推荐该教程。 –

回答

2

的例子应该已经:

>>> class Thing(object): 
...  def test(self, hi): 
...    print hi 
... 
>>> a = Thing() 
>>> a.test("Hello") 
Hello 

预期其中一期工程。

类中的所有函数[1]都需要额外的参数,通常称为self。它用来指代函数被调用的类的对象。

此外,"hi",应该只是hi,减去引号,引号使它成为字符串文字而不是变量。

[1]除了称为static functions/methods的特殊功能类别。