代码之家  ›  专栏  ›  技术社区  ›  m1k3y3

python:提供的参数太多

  •  1
  • m1k3y3  · 技术社区  · 15 年前

    有人能解释一下这是怎么回事吗?我做错什么了吗?

    >>> 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 回复  |  直到 15 年前
        1
  •  2
  •   Horst Helge    15 年前

    我想这是因为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
    
        2
  •  4
  •   Eli Bendersky    15 年前

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

    尝试:

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

    但还是像以前一样叫它:

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

    f2x , 自己 是调用成员的对象。这是Python的一个非常基本的概念,您应该真正了解它。

        3
  •  4
  •   Lie Ryan Bryan    15 年前

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

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

    standard tutorial 是一个不错的选择,特别是如果你已经有了一些其他语言的经验。

    你这样称呼它:

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