【问题标题】:TypeError referencing class methodTypeError 引用类方法
【发布时间】:2012-12-06 07:46:11
【问题描述】:

第一次在我的一个项目中使用类,我似乎在我无法选择的地方犯了一个错误。

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 排成一行,因为我会有很多类似的事情。

有人介意指出我要去哪里以及为什么吗?

【问题讨论】:

  • 我也强烈建议您使用新型类(搜索差异的定义以及如何使用它们)。 PEP 8,Python 风格指南,也是您可能喜欢阅读的内容(标准 Python 代码将使用其命名约定,其名称类似于 AIRespondgenerate_responseai_responder)。
  • @ChrisMorgan 谢谢你的建议。我对 PEP 8 特别感兴趣,因为我看到其他人也向其他海报提出了这个建议。新式课程似乎有点令人困惑,但我正在浏览它们的一些视频教程。谢谢!

标签: python class methods python-2.7 typeerror


【解决方案1】:

您正在将函数 giveResponse 的结果分配给 retrieve_ai_response。

试试:

retrieve_ai_response = aiResponder.giveResponse

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

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

【讨论】:

  • giveResponse 应该返回一个值。
  • 谢谢 chm 我已经修改了回复。
  • 谢谢,这成功了。我不知道该给谁打勾,因为你们俩都回答得如此专一而好。谢谢! :)
【解决方案2】:
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)

我已经修改了你的代码,希望它有效!

【讨论】:

  • 谢谢,这完全符合需要。我看到我的参数加倍了。
猜你喜欢
  • 2010-09-28
  • 2017-04-17
  • 1970-01-01
  • 2020-03-02
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多