在python中定义带有1个参数的方法时出错

时间:2012-12-15 15:31:33

标签: python

我尝试在类up中使用1个参数定义函数X,如下所示:

class X:

    def __init__(self):
        self.elem=[]

    def i(self, new):
        self.elem.append(new)
        self.up(self,len(self.elem)-1)                    <= error here

    def up(self, n):
        print n

border = X()

a = [2,4,3,1]

for i in a:
    border.i (i)

错误如下所示:

$ Traceback (most recent call last):
  File "p.py", line 60, in <module>
    border.i (i)
  File "prim.py", line 50, in i
    self.up(self,len(self.elem)-1)
TypeError: up() takes exactly 2 arguments (3 given)
$ 

如果我像i那样打电话给self.up(self),它会编译,print n会显示:

$ <__main__.X instance at 0x7f7a7ddf0128>
<__main__.X instance at 0x7f7a7ddf0128>
<__main__.X instance at 0x7f7a7ddf0128>
<__main__.X instance at 0x7f7a7ddf0128>
$ 

3 个答案:

答案 0 :(得分:2)

您无需将self传递给up()

def i(self, new):
    self.elem.append(new)
    self.up(len(self.elem)-1)

Python为你做到了这一点;通过查找self.up,您将获得一个绑定方法,这意味着当您调用{{1}时,Python将自动添加到self }。

你实际上是在呼叫up();三个元素,预计只有2个。

答案 1 :(得分:1)

您不必将self传递给该方法。这是由python直接完成的

这是我们使用类和方法的原因之一:你没有显式传递对象,因为它在一个类中,因此使用了特定的实例

答案 2 :(得分:1)

您无需明确传递self

self.up(self, len(self.elem)-1)
        ^^^^^ this needs to be removed

当我进行此更改并运行您的程序时,我得到了

0
1
2
3