python:提供的参数太多

时间:2010-10-28 16:02:04

标签: python class parameter-passing

任何人都可以解释它有什么问题吗?我做错了什么?

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

3 个答案:

答案 0 :(得分:4)

您忘记了所有成员函数隐式地获取另一个参数,在Python中按惯例称为self

尝试:

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

但仍然像以前一样称呼它:

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

f2x中,self是调用该成员的对象。这是你应该真正了解的一个非常基本的Python概念。

答案 1 :(得分:4)

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

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

我建议您阅读一本初学Python教程/教程。 standard tutorial是不错的选择,特别是如果您已经掌握了另一种语言的经验。

然后你这样称呼它:

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

答案 2 :(得分: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