2012-12-19 69 views
0

第一次在我的一個項目中使用類時,我似乎在某個我無法選擇的地方犯了一個錯誤。引用類方法的TypeError

class aiRespond: 
    def generateResponse(self, external_input): 
     return external_input 

    def giveResponse(self, external_input): 
     self.generateResponse(self, external_input) 

aiResponder = aiRespond() 
retrieve_ai_response = aiResponder.giveResponse() 

while 1: 
    external_input = raw_input("> ") 
    print retrieve_ai_response(external_input) 

錯誤:

TypeError: unbound method giveResponse() must be called with aiRespond instance as first argument (got str instance instead) 

我已經試過這種結構的許多不同的方式。我寧願retrieve_ai_response = aiRespond.giveResponse在一行中,因爲我將會有很多類似的東西。

有人會介意指出我要去哪裏,爲什麼?

+1

我還強烈建議您使用新式類(搜索差異的定義以及如何使用它們)。 Python風格指南PEP 8也是您可能想要閱讀的東西(標準Python代碼將使用其命名約定,其名稱將如「AIRespond」,「generate_response」和「ai_responder」)。 –

+0

@ChrisMorgan謝謝你的建議。我對PEP 8特別感興趣,因爲我已經看到其他人也向其他海報提出這一點。新風格的課程似乎有點令人困惑,但我正在講述他們的一些視頻教程。謝謝 ! – abkai

回答

1
class aiRespond: 
    def generateResponse(self, external_input): 
     return external_input 

    def giveResponse(self, external_input): 
     return self.generateResponse(external_input) #remove self as parameter,add return 

aiResponder = aiRespond() 
retrieve_ai_response = aiResponder.giveResponse #remove "()" 

while 1: 
    external_input = raw_input("> ") 
    print retrieve_ai_response(external_input) 

我已經修改你的代碼,希望工程!

+0

謝謝,這完全按照需要工作。我發現我的參數翻倍了。 – abkai

3

您正在將函數giveResponse的結果分配給retrieve_ai_response。

嘗試:

retrieve_ai_response = aiResponder.giveResponse 

而且擺脫「自我」作爲giveResponse函數體中的第一個參數。正如你所呼叫self.generateResponse你不需要它:

def giveResponse(self, external_input): 
    return self.generateResponse(external_input) 
+0

'giveResponse'應該返回一個值。 – prehistoricpenguin

+0

感謝chm我修改了回覆。 – timc

+0

謝謝,這工作。我不確定是誰給了'嘀嗒',因爲你們都這麼專門而且很好地回答了。謝謝! :) – abkai

相關問題