Python Unbound Method TypeError

2019-01-11 18:44发布

问题:

The method get_pos is supposed to grab what the user inputs in the entry. When get_pos is executed, it returns with:

TypeError: unbound method get_pos() must be called with app instance as first argument (got nothing instead)

Code:

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

回答1:

You reported this error:

TypeError: unbound method get_pos() must be called with app instance as first argument (got nothing instead)

What this means in layman's terms is you're doing something like this:

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

What you need to do instead is something like this:

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

It's hard to get any more specific than this because you didn't show us the actual code that is causing the errors.



回答2:

I've run into this error when forgetting to add parentheses to the class name when constructing an instance of the class:

from my.package import MyClass

# wrong
instance = MyClass

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

# right
instance = MyClass()


instance.someMethod()


回答3:

My crystal ball tells me that you are binding app.get_pos to a button using the class app (which really should be called App) instead of creating an instance app_instance = app and using app_instance.get_pos.

Of course as others have pointed out there are so many other issues with the code you did post it is a bit hard to guess at the mistakes in the code you didn't post.