2010-08-23 50 views
1

我有一個python類,並且在類中我調用了其他方法之一的2種不同方法。一件作品,一個給了我一個類型錯誤:get_doms()恰恰1個參數(2給出):如何在python中調用類中的方法 - 類型錯誤問題

def start(self,cursor): 
    recs = self.get_recs(cursor) # No errors here 
    doms = self.get_doms(cursor) # I get a TypeError here 




    def get_doms(self,cursor): 
    cursor.execute("select domain from domains") 
    doms = [] 
    for i in cursor._rows: 
     doms.append(i[0]) 
    return doms 

    def get_recs(self,cursor): 
    cursor.execute("select * from records") 
    recs = [] 
    print cursor._rows 
    recs = [list(i) for i in cursor._rows] 
    return recs 

如何成功地調用同一個類中的其他方法我的類中的方法?爲什麼一個人工作,另一個不工作? ~~謝謝~~

+2

檢查您沒有'get_doms'重新定義某處 – 2010-08-23 20:37:51

+1

回溯會有幫助 – msw 2010-08-23 20:44:42

回答

0

我無法重現您提到的錯誤。我認爲代碼沒問題。但我建議不要使用cursor._rows,因爲_rows屬性是一個私有屬性。私有屬性是一個實現細節 - 它們不能保證在將來的版本cursor中。你可以達到你想要的東西,沒有它,因爲cursor本身是一個迭代:

def start(self,cursor): 
    recs = self.get_recs(cursor) 
    doms = self.get_doms(cursor) 
    print(recs) 
    print(doms) 
def get_doms(self,cursor): 
    cursor.execute("select domain from domains") 
    doms = [row[0] for row in cursor] 
    return doms 

def get_recs(self,cursor): 
    cursor.execute("select * from records") 
    recs=[list(row) for row in cursor] 
    return recs 
+0

謝謝〜ubuntu,我已根據您的建議更改了我的代碼。我不知道我做了什麼,但我不再得到TypeError,我的代碼似乎按照需要工作。 – Craig 2010-08-26 18:44:01

0

正如gnibbler說,你可能介於猴子修補get_doms方法,並用正常功能代替它,而不是一個綁定的方法(方法被綁定,也就是說,當它在類中定義並在對象中訪問時,它將保存其變量self)。您需要在該類上修改該方法,而不是在對象上,或者使用閉包來模擬綁定,就像在js中一樣。

+0

>使用閉包來模擬綁定 - 您可以使用types.MethodType將任何方法綁定到任何對象,不需要閉包。 – 2010-08-23 21:31:38