2012-07-30 41 views
0

我想一個numpy的矩陣傳遞給一個對象的方法,但我不斷收到類型錯誤:test_obj()恰恰1參數(2給出)numpy的矩陣作爲參數傳遞給方法

我覺得矩陣對象不正確解釋爲矩陣對象,但是當相同的代碼作爲簡單函數運行時,它工作正常。我如何讓我的對象方法像簡單的函數一樣工作?

代碼:

from numpy import * 

class Tester(object): 
    def test_obj(x): 
     print 'test obj:', type(x) 

    def test_fun(x): 
     print 'test fun:', type(x) 

X = matrix('5.0 7.0') 

test_fun(X) 

tester = Tester() 
tester.test_obj(X) 

輸出:

test fun: <class 'numpy.matrixlib.defmatrix.matrix'> 
Traceback (most recent call last): 
    File "/home/fornarim/test_matrix.py", line 22, in <module> 
    tester.test_obj(X) 
TypeError: test_obj() takes exactly 1 argument (2 given) 

回答

5

所有對象的方法需要一個隱含的自我參數,所以你的方法test_fun必須

def test_fun(self,arg): 

不像在Java中,在Python中你必須引用該對象。

如下所述,也可以使用@staticmethod修飾器來指示該函數不需要對該對象的引用。

@staticmethod 
def test_fun(arg): 
+0

或者,如果你的'test_obj'方法不以任何依賴或改變對象的狀態(但以某種方式在邏輯上鍊接到它,因此,你喜歡它定義爲類的一部分而不是作爲一個簡單的函數),你也可以使用'@ staticmethod'裝飾器來註釋函數 - 然後它不需要'self'參數。 – 2012-07-30 17:46:17

+0

謝謝,我添加了答案,但我有一種感覺,作爲他的測試對象 – 2012-07-30 17:50:51

+0

作爲其一部分,我想你的原始答案是他需要的,但更好是完整:)我注意到儘管你的回答和編輯(我認爲)對他的問題現在有點不對勁了:在他最初的問題中,test_fun指的是一個函數(不是方法),test_obj是「Tester」對象的一個​​方法。現在問題'test_fun'和'test_obj'除了名字是相同的。 – 2012-07-31 17:02:31

相關問題