2014-01-12 50 views
0

的錯誤是:的Python認爲我路過4個參數,但我清楚只有經過3

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個參數給出了,我該如何解決?

回答

5

綁定方法有self自動,隱式添加。千萬不要錯過它明確:

K[i][j] = self.kernel(self, B[i], C[j]) 

刪除self有:

K[i][j] = self.kernel(B[i], C[j]) 

否則kernel()被稱爲與kernel(self, self, B[i], C[j]),或者4個參數。

3

因爲在Python中,self作爲參數隱式傳遞給類的任何成員函數。所以你真正做的是通過兩個self s。

只要刪除self,它會解決問題。

K[i][j] = self.kernel(B[i], C[j]) 
4

注意

obj_name.kernel(B[i], C[j])

會做同樣的工作是

class_name.kernel(obj_name, B[i], C[j]),其中obj_nameclass_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 
相關問題