gpt4 book ai didi

python - 调用函数时出现 "bound method"错误是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 22:20:05 27 4
gpt4 key购买 nike

我正在创建一个单词解析类,我不断得到一个

bound method Word_Parser.sort_word_list of <__main__.Word_Parser instance at 0x1037dd3b0>

运行时出错:

class Word_Parser:
"""docstring for Word_Parser"""
def __init__(self, sentences):
self.sentences = sentences

def parser(self):
self.word_list = self.sentences.split()

def sort_word_list(self):
self.sorted_word_list = self.word_list.sort()

def num_words(self):
self.num_words = len(self.word_list)

test = Word_Parser("mary had a little lamb")
test.parser()
test.sort_word_list()
test.num_words()
print test.word_list
print test.sort_word_list
print test.num_words

最佳答案

这里没有错误。你正在打印一个函数,这就是函数的样子。

要真正调用这个函数,你必须在那之后加上括号。你已经在上面做了。如果要打印调用函数的结果,只需让函数返回值,然后将 print 放在那里。例如:

print test.sort_word_list()

另一方面,如果您希望函数改变对象的状态,然后以其他方式打印状态,那也可以。

现在,您的代码似乎在某些地方有效,但在其他地方无效;让我们看看为什么:

  • parser 设置了一个名为 word_list 的变量,然后你print test.word_list,这样就可以了。
  • sort_word_list 设置一个名为 sorted_word_list 的变量,然后您稍后 print test.sort_word_list——即函数,而不是变量。所以,你看到了绑定(bind)方法。 (另外,正如 Jon Clements 指出的那样,即使你修复了这个问题,你也会打印出 None,因为这就是 sort 返回的内容。)
  • num_words 设置一个名为 num_words 的变量,然后您再次打印该函数——但在这种情况下,该变量与该函数具有相同的名称,这意味着您re 实际上用它的输出替换了这个函数,所以它可以工作。然而,这可能不是您想要做的。

(在某些情况下,乍一看,这似乎是一个好主意——你只想计算一次,然后一遍又一遍地访问它,而不是不断地重新计算。但这不是方法。要么使用 @property,要么使用 memoization 装饰器。)

关于python - 调用函数时出现 "bound method"错误是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com