関数を呼び出すときに「バインドされたメソッド」エラーが発生するのはどういう意味ですか? 質問する

関数を呼び出すときに「バインドされたメソッド」エラーが発生するのはどういう意味ですか? 質問する

私は単語解析クラスを作成していますが、

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

ベストアンサー1

ここではエラーはありません。関数を印刷していますが、関数とはこのようなものなのです。

実際に電話関数を呼び出す場合は、その後に括弧を付ける必要があります。これはすでに上で行っています。関数を呼び出した結果を出力したい場合は、関数に値を返させて、そこに出力を記述します。たとえば、次のようになります。

print test.sort_word_list()

一方、関数でオブジェクトの状態を変更し、その状態を別の方法で出力したい場合も、問題ありません。

さて、コードはいくつかの場所では機能しているように見えますが、他の場所では機能していないようです。その理由を見てみましょう。

  • parserという変数を設定しword_list、後で を設定するprint test.word_listと、それが機能します。
  • sort_word_listは という変数を設定しsorted_word_list、その後print test.sort_word_list、変数ではなく関数を設定します。つまり、バインドされたメソッドが表示されます。(また、Jon Clements が指摘しているように、これを修正したとしても、Nonesort返されるため、 が印刷されます。)
  • num_wordsという変数を設定しnum_words、再び関数を出力します。ただし、この場合、変数の名前は関数と同じなので、実際には関数をその出力に置き換えているので、うまくいきます。ただし、これはおそらくあなたがやりたいことではないかもしれません。

(一見すると、これは良いアイデアのように思える場合があります。つまり、何かを一度だけ計算し、それを何度も何度もアクセスして、それを常に再計算しないようにしたい場合です。しかし、これはそれを行う方法ではありません。 を使用するか@property、メモ化デコレータを使用してください。)

おすすめ記事