2010-04-09 8 views
3

다른 모듈에서 참조 된 싱글 톤으로 모듈을 사용하고 싶습니다. 그것은이 같은 보인다 (즉 실제로 내가 일하고 있어요 코드 아니에요,하지만 난 도망 모든 관련이없는 물건을 던져 그것을 간체) :변수가 Python으로 선언되었는지 어떻게 알 수 있습니까?

import singleton 
import printer 

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

if __name__ == '__main__': 
    pass 

singleton.py

main.py를

variable1 = '' 
variable2 = '' 

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

printer.py I 출력 1/2를 얻을 수 있지만, 대신에 빈 공간을 얻을 것으로 기대

import singleton 

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

. 싱글 톤을 print.py 모듈로 가져온 후에는 변수가 다시 초기화된다는 것을 이해합니다.

그래서 나는 그들이 singleton.py에 이전 intialized 있다면 내가 확인해야한다고 생각 :

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

하지만 그렇게하는 방법을 모르겠어요. 아니면 잘 모르겠 python에서 싱글 톤 모듈을 사용하는 더 좋은 방법이 있습니다

답변

7

Init 안에 할당 변수를 강제로 지역으로 취급됩니다. 해결하기 위해 global 키워드를 사용하여이 :

variable1 = '' 
variable2 = '' 

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

감사합니다. 그게 정확히 내가 찾고 있던 것이 었습니다. –

2

당신은 은 바르 사전 드 사용할 수 있습니다전역 :

vars().has_key('variable1') 

또는

globals().has_key('variable1') 

편집 :

또한

...

'variable1' in vars() 

예컨대

if not 'variable1' in vars(): 
    variable1 = '' 
관련 문제