Python 引用类方法时发生类型错误

Python 引用类方法时发生类型错误,python,class,methods,python-2.7,typeerror,Python,Class,Methods,Python 2.7,Typeerror,第一次在我的一个项目中与班级一起工作,我似乎在某个我无法选择的地方犯了一个错误 class aiRespond: def generateResponse( self, external_input ): return external_input def giveResponse( self, external_input ): self.generateResponse(self, external_input) aiResponder =

第一次在我的一个项目中与班级一起工作,我似乎在某个我无法选择的地方犯了一个错误

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\u ai\u response=aiRespond.giveResponse
在一行中,因为我将有很多类似的东西


有人能指出我要讲的内容和原因吗?

您正在分配函数giveResponse的结果以检索\u ai\u响应

尝试:

也要摆脱“self”作为giveResponse函数体的第一个参数。当您调用self.generateResponse时,您不需要它:

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

您正在分配函数giveResponse的结果以检索_ai_响应

尝试:

也要摆脱“self”作为giveResponse函数体的第一个参数。当您调用self.generateResponse时,您不需要它:

def giveResponse( self, external_input ):
    return self.generateResponse(external_input)
我已经修改了你的代码,希望它能工作


我已经修改了你的代码,希望它能工作

我还强烈建议您使用新样式的类(搜索差异的定义以及如何使用它们)。《Python风格指南》PEP 8也是您可能喜欢阅读的内容(标准Python代码将使用其命名约定,其名称包括
AIRespond
generate\u response
ai\u responder
)。@ChrisMorgan感谢您的建议。我对PEP 8特别感兴趣,因为我看到其他人也向其他海报建议这一点。新风格的课程似乎有点让人困惑,但在我讲话的时候,我正在看一些关于它们的视频教程。非常感谢。我还强烈建议您使用新样式的类(搜索差异的定义以及如何使用它们)。《Python风格指南》PEP 8也是您可能喜欢阅读的内容(标准Python代码将使用其命名约定,其名称包括
AIRespond
generate\u response
ai\u responder
)。@ChrisMorgan感谢您的建议。我对PEP 8特别感兴趣,因为我看到其他人也向其他海报建议这一点。新风格的课程似乎有点让人困惑,但在我讲话的时候,我正在看一些关于它们的视频教程。谢谢大家!
giveResponse
应该返回一个值。谢谢chm我已经修改了响应。谢谢,这很有效。我不确定该给谁打勾,因为你们两人的回答都是那么专一、那么好。谢谢!:)
giveResponse
应该返回一个值。谢谢chm我已经修改了响应。谢谢,这很有效。我不确定该给谁打勾,因为你们两人的回答都是那么专一、那么好。谢谢!:)谢谢,这完全符合需要。我看到我的参数加倍了。谢谢,这完全符合需要。我看到我的参数加倍了。
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)