【问题标题】:python: too many parameters providedpython:提供的参数太多
【发布时间】:2010-10-28 16:02:03
【问题描述】:

谁能解释一下它有什么问题?我是不是做错了什么?

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

【问题讨论】:

  • 在这个问题的答案出现之前或之后,您是否将 self 作为函数声明的第一个参数?你还有问题吗?
  • 您能否将问题编辑回原来的形式,以便回答有意义?

标签: python class parameter-passing


【解决方案1】:

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

试试:

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

但还是像以前那样称呼它:

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

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

【讨论】:

    【解决方案2】:

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

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

    我建议阅读一本 Python 初学者书籍/教程。 standard tutorial 是不错的选择,特别是如果您已经有一些其他语言的经验。

    那你这样称呼它:

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

    【讨论】:

    • @m1k3y02:你用的是什么python?添加 self 参数后,它在我的机器上运行良好。
    • 2.6.5,重新进入python命令行后一切正常,谢谢大家的帮助
    【解决方案3】:

    我猜是因为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
    

    【讨论】:

    • 我认为你的意思是“明确地”?
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 2014-03-14
    • 2019-01-16
    • 1970-01-01
    • 2016-10-28
    • 2018-01-01
    • 2023-03-08
    • 2020-10-25
    相关资源
    最近更新 更多