我尝试在类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>
$
答案 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