2014-04-02 32 views
1

對不起,如果標題沒有意義,我對此比較新。這是我的代碼:將類實例方法傳遞給Python中的另一個函數(2.7)

class MeanFlow: 
    def __init__(self, V0=1): 
     self.V0 = V0 
    def LHS(self, t, y): 
     return y[0]*self.V0 


def velocity_field(w,f): 
    z = 0 # dummy 
    u = f(z,w).real 
    v = -1*f(z,w).imag 
    return u, v 

w0 = 1 
mean = MeanFlow() 
dwdz = mean.LHS 
print(velocity_field(w0, dwdz)) 

但我得到的錯誤TypeError: 'int' object has no attribute '__getitem__'

我的問題是我怎麼通過這個功能,這是我的類實例的方法到另一個函數。如果我在類之外定義函數並將其傳遞給另一個函數,但這不是我想要的。謝謝!

編輯:錯字return = y[0]*self.V0已更正。

+0

你已經證明不能證明你張貼的所有錯誤代碼。相反,由於'return = y [0] * self.V0'這行,所以編譯失敗。 – user2357112

回答

3

什麼產生TypeError: 'int' object has no attribute '__getitem__'是這樣的:

y[0] 

這是因爲,在這一點上,的y價值1,整數,y[0]充當如果y是一個列表或字符串(__getitem__是方法調用來獲取列表中的項目)。如果y是一個列表(例如y = [1]),它會正常工作。

如果刪除[0],你在業務:

class MeanFlow: 
    def __init__(self, V0=1): 
     self.V0 = V0 
    def LHS(self, t, y): 
     return y*self.V0 


def velocity_field(w,f): 
    z = 0 # dummy 
    u = f(z,w).real 
    v = -1*f(z,w).imag 
    return u, v 

w0 = 1 
mean = MeanFlow() 
dwdz = mean.LHS 
print(velocity_field(w0, dwdz)) 
+0

對不起,我要完成的任務是完全錯誤的,我沒有發現。並感謝您的迴應:) – Jack

+1

沒問題!這樣的錯誤很難發現,特別是當你自己編寫代碼時。通常我的解決方法是退後一步,想象一下變量*在理論上應該在理論上的每個點上,然後使用print來找出它們實際上是什麼。 – rickcnagy

+0

作爲一個後續,我想知道爲什麼不可能然後定義w0 = [1]並使用涉及y [0]的方法? – Jack

2

代碼有錯誤。 您將通過1作爲velocity_field的第一個參數,然後將它作爲第二個參數傳遞給LHSy)。最後,您在y上通過y[0]致電__getitem__,並引發異常。

此外,將結果分配給return時出現語法錯誤。

相關問題