2017-07-05 1 views
0

J'essaie donc de créer une interface graphique qui partage des informations entre les images (qui sont configurées en classes) erreur, qui, malgré les nombreuses heures de googling et d'essayer différentes choses, n'a pas eu de chance. Im essayant juste de créer une bibliothèque qui peut être écrite et lue d'autres classes. J'ai créé ce code de test juste pour déboguer le problème, donc si vous voulez voir mon code principal, faites le moi savoir, merci.TypeError: méthode non liée SendVars() doit être appelé avec l'instance de Vars comme premier argument (à la place l'instance bool)

class Vars(): 

    global vari 

    vari = dict(Sifo = False, Username = "", Password = "", Event = "", Time = "") 


    def GetVars(self, var): 

     print "1" 
     return vari.pop(var) 

    def SendVars(self, var, val): 

     print"2" 
     vari[str(var)] = val 

class maintest(): 

    def test(self): 

     yes = raw_input("Yes: ") 

     if yes == "1": 
      yes = True 
     else: 
      yes = False 

     self.result(yes) 

    def result(self, reslt): 

     if reslt == True: 
      yes = True 
     else: 
      yes = False 

     Vars.SendVars('yes', yes) 

a = maintest() 
a.test() 

print Vars.GetVars('yes') 

Sortie:

Yes: 1 
Traceback (most recent call last): 
    File "/Users/jacobsifodaskalakis/Documents/LiClipse 
Workspace/Test/Test4.py", line 43, in <module> 
    a.test() 
    File "/Users/jacobsifodaskalakis/Documents/LiClipse 
Workspace/Test/Test4.py", line 31, in test 
    self.result(yes) 
    File "/Users/jacobsifodaskalakis/Documents/LiClipse 
Workspace/Test/Test4.py", line 40, in result 
    Vars.SendVars('yes', yes) 
TypeError: unbound method SendVars() must be called with Vars 
instance as first argument (got str instance instead) 

Répondre

2

On dirait que vous devez instancier votre classe Vars avant de pouvoir l'utiliser:

def result(self, reslt): 

    if reslt == True: 
     yes = True 
    else: 
     yes = False 

    vars_instance = Vars() 

    vars_instance.SendVars('yes', yes) 

un coup d'oeil à cette question: How to instantiate a class in python

Vous devez également l'instancier vers la fin de votre script:

vars_instance = Vars() 

print vars_instance.GetVars('yes') 

enfin, vous avez oublié de définir réellement votre global vari

global vari 
vari = {} 
+1

Tu es mon héros putain! Cela m'avait tellement dérangé, et je savais que c'était quelque chose de stupidement simple comme ça, j'avais le global défini mais je ne l'ai d'une manière ou d'une autre pas collé dans la question lol. Encore merci!!! – Jake

+0

Pas de problème! En aparté, j'éviterais de nommer les variables 'vars', car cela a une signification particulière dans Python https://docs.python.org/2.7/library/functions.html#vars Je l'ai fait dans ma réponse pour plus de commodité. Pense que je vais le changer maintenant. – perfect5th

+0

Ouais, Eclipse m'a crié dessus quand je l'ai mis alors je l'ai changé juste var qui semblait fonctionner correctement. – Jake