2010-04-09 4 views
3

Je souhaite utiliser un module en tant que singleton référencé dans d'autres modules. Il ressemble à quelque chose comme ça (ce n'est pas en fait un code que je travaille, mais je simplifie à jeter tous les trucs sans rapport):Comment savoir si la variable est déclarée en Python?

main.py

import singleton 
import printer 

def main(): 
    singleton.Init(1,2) 
    printer.Print() 

if __name__ == '__main__': 
    pass 

singleton.py

variable1 = '' 
variable2 = '' 

def Init(var1, var2) 
    variable1 = var1 
    variable2 = var2 

printer.py

import singleton 

def Print() 
    print singleton.variable1 
    print singleton.variable2 

Je me attends à obtenir une sortie 1/2, mais obtenir un espace vide. Je comprends qu'après avoir importé singleton dans le module print.py, les variables ont été initialisées à nouveau.

Je pense donc que je dois vérifier si elles étaient intialized avant dans singleton.py:

if not (variable1): 
    variable1 = '' 
if not (variable2) 
    variable2 = '' 

Mais je ne sais pas comment faire. Ou il y a une meilleure façon d'utiliser des modules singleton en python dont je ne suis pas au courant :)

Répondre

7

L'affectation à l'intérieur de Init force les variables à être traitées comme locales. Utilisez le mot-clé global pour résoudre ce problème:

variable1 = '' 
variable2 = '' 

def Init(var1, var2) 
    global variable1, variable2 
    variable1 = var1 
    variable2 = var2 
+0

Merci beaucoup! C'était exactement ce que je cherchais. –

2

Vous pouvez utiliser de dictionnaires vars et : GLOBALS

vars().has_key('variable1') 

ou

globals().has_key('variable1') 

Edit:

également ...

'variable1' in vars() 

par exemple

if not 'variable1' in vars(): 
    variable1 = '' 
Questions connexes