2010-10-28 40 views
1

任何人都可以请解释它有什么问题吗?难道我做错了什么 ?python:提供的参数太多

>>> class qw: 
...  def f2x(par1, par2, par3): 
...    print par1, par2, par3 
... 
>>> obj = qw() 
>>> obj.f2x("123", 13, "wert") Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: f2x() takes exactly 3 arguments (4 given) 
>>> 

,如果我将定义只是一个功能,这是所有工作的罚款

>>> def f2x(par1, par2, par3): 
...  print par1, par2, par3 
... 
>>> f2x("1", 2, "too many") 
1 2 too many 
>>> 
+0

你已经'self'作为第一个参数之前或之后回答你的函数声明一起来到这个题?你还有问题吗? – 2010-10-28 16:17:06

+0

请问您可以将问题编辑回原来的格式,以便回复有意义吗? – 2010-10-28 16:24:12

回答

2

我猜是因为Python类对象的每一个方法的其隐含有一个指向对象本身第一个参数中。

尝试

def f2x(self, par1, par2, par3): 

你还是你的3个自定义参数,调用它

>>> class qw: 
...  def f2x(self, p1, p2, p3): 
...    print p1,p2,p3 
... 
>>> o = qw() 
>>> o.f2x(1,2,3) 
1 2 3 
+0

谢谢大家的回答,解决的问题 – m1k3y3 2010-10-28 16:18:28

+0

我觉得你的意思是'明确'吗? – 2010-10-28 22:15:51

4

你忘了所有的成员函数得到另一种说法暗示,这在Python被称为按照惯例self

尝试:

class qw: 
    def f2x(self, par1, par2, par3): 
    print par1, par2, par3 

但仍然可以调用它像以前一样:

obj = qw() 
obj.f2x("123", 13, "wert") 

f2xself是在其成员被调用的对象。这是您应该真正了解的Python的一个非常基本的概念。

4

您需要self参数在类的实例方法的定义:

class qw: 
    def f2x(self, par1, par2, par3): 
     print par1, par2, par3 

我建议你通过一个初学者Python书籍/教程去。 standard tutorial是不错的选择,尤其是如果你已经有一些其他语言的经验。

然后调用它像这样:

g = qw() 
g.f2x('1', '2', '3') 
+0

@ m1k3y02:你在用什么python?在添加self参数后,它在我的机器上运行良好。 – 2010-10-28 16:13:09

+0

2.6.5,重新进入python命令行后全部开始工作,因为它应该是,谢谢你的帮助 – m1k3y3 2010-10-28 16:21:12