错误是:
TypeError: kernel() takes exactly 3 arguments (4 given)
相应的代码是:
K[i][j] = self.kernel(self, B[i], C[j])
...
def kernel(self, P, Q)
以下几行的结果是:
print self: object at 0x....
print len((self, B[i], C[j])): 3
print len((B[i])): 4
print len((C[j])): 4
为什么会说4个参数,我该如何解决呢?
答案 0 :(得分:5)
绑定方法会自动隐式添加self
。不要明确地传递它:
K[i][j] = self.kernel(self, B[i], C[j])
删除self
:
K[i][j] = self.kernel(B[i], C[j])
否则使用kernel()
或4个参数调用kernel(self, self, B[i], C[j])
。
答案 1 :(得分:4)
请注意
obj_name.kernel(B[i], C[j])
将完成同样的工作
class_name.kernel(obj_name, B[i], C[j])
,其中obj_name
是class_name
类的实例。
所以你需要把它称为:
K[i][j] = self.kernel(B[i], C[j])
示例:强>
class C:
def f(self, a):
print "HI: " + str(a)
var = C()
var.f(1)
C.f(var, 1)
<强>输出:强>
HI: 1
HI: 1
答案 2 :(得分:3)
因为在Python中,self
被隐式地作为参数传递给类的任何成员函数。所以你真正要做的就是传递两个self
。
只需删除self
即可解决问题。
K[i][j] = self.kernel(B[i], C[j])