web-dev-qa-db-ja.com

Python Unbound Method TypeError

メソッドget_posは、ユーザーがエントリに入力したものを取得することになっています。いつ get_posが実行されると、次のように返されます。

TypeError:アンバインドメソッドget_pos()は、最初の引数としてアプリインスタンスを使用して呼び出す必要があります(代わりに何も取得しません)

コード:

class app(object):
    def __init__(self,root):
        self.functionframe=FunctionFrame(root, self)
            self.functionframe.pack(side=BOTTOM)
    def get_pos(self):
        self.functionframe.input(self)
class FunctionFrame(Frame):
    def __init__(self,master,parent):
        Frame.__init__(self,master,bg="grey90")
        self.entry = Entry(self,width=15)
        self.entry.pack
    def input(self):
        self.input = self.entry.get()
        return self.input
15
Steven

このエラーを報告しました:

TypeError:アンバインドメソッドget_pos()は、最初の引数としてアプリインスタンスを使用して呼び出す必要があります(代わりに何も取得しません)

素人の言葉でこれが意味することは、あなたがこのようなことをしているということです:

class app(object):
    def get_pos(self):
        ...
...
app.get_pos()

代わりにあなたがする必要があるのは次のようなものです:

the_app = app()  # create instance of class 'app'
the_app.get_pos() # call get_pos on the instance

エラーの原因となっている実際のコードを示さなかったため、これより具体的に取得することは困難です。

43
Bryan Oakley

クラスのインスタンスを作成するときにクラス名に括弧を追加するのを忘れると、このエラーに遭遇しました:

from my.package import MyClass

# wrong
instance = MyClass

instance.someMethod() # tries to call MyClass.someMethod()

# right
instance = MyClass()


instance.someMethod()
16
hawkgas

私の水晶玉は、インスタンスapp.get_posを作成する代わりに、クラスapp(実際にはAppと呼ばれる)を使用してapp_instance = appをボタンにバインドしていることを教えてくれます。 app_instance.get_posを使用します。

もちろん、他の人が指摘したように、投稿したコードには他にも多くの問題があるため、投稿していないコードの誤りを推測するのは少し難しいです。

2
Duncan