web-dev-qa-db-fra.com

Python Méthode non liée TypeError

La méthode get_pos est censé saisir ce que l'utilisateur entre dans l'entrée. Quand get_pos est exécuté, il revient avec:

TypeError: la méthode non liée get_pos () doit être appelée avec l'instance d'application comme premier argument (rien obtenu à la place)

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
15
Steven

Vous avez signalé cette erreur:

TypeError: la méthode non liée get_pos () doit être appelée avec l'instance d'application comme premier argument (rien obtenu à la place)

En termes simples, cela signifie que vous faites quelque chose comme ceci:

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

Ce que vous devez faire à la place est quelque chose comme ceci:

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

Il est difficile d'être plus précis que cela, car vous ne nous avez pas montré le code réel à l'origine des erreurs.

43
Bryan Oakley

J'ai rencontré cette erreur en oubliant d'ajouter des parenthèses au nom de la classe lors de la construction d'une instance de la classe:

depuis my.package import MyClass

# wrong
instance = MyClass

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

# right
instance = MyClass()


instance.someMethod()
16
hawkgas

Ma boule de cristal me dit que vous liez app.get_pos à un bouton utilisant la classe app (qui devrait vraiment s'appeler App) au lieu de créer une instance app_instance = app et en utilisant app_instance.get_pos.

Bien sûr, comme d'autres l'ont souligné, il y a tellement d'autres problèmes avec le code que vous avez publié, il est un peu difficile de deviner les erreurs dans le code que vous n'avez pas publié.

2
Duncan