0

我尝试up在 class 中使用 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)
$ 

如果我这样调用iself.up(self)它会编译并print n显示如下:

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

3 回答 3

2

您不需要传递selfup()

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

Python 为你做这件事;通过查找self.up,你会得到一个绑定的方法,这意味着 Python 会在你调用时自动添加。selfup()

你实际上是在打电话up(self, self, len(self.elem)-1);三个元素,其中只有 2 个。

于 2012-12-15T15:33:45.413 回答
1

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

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

于 2012-12-15T15:33:48.023 回答
1

您不需要self明确传递:

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

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

0
1
2
3
于 2012-12-15T15:34:36.057 回答