2014-11-18 2 views
1

파이썬에서 범위 지정과 관련된 질문이 있습니다.Python 범위/네임 스페이스 모듈 간

파일 : 아래는 코드입니다 settings.py는

파일
#module settings 
fruit = 'banana' 

def set_fruit(val): 
    global fruit 
    print 'Setting fruit ', fruit, ' to ', val 
    fruit = val 

:

#module helper 
from settings import fruit 

class Helper(object): 
    def __init__(self): 
     print 'Inside Helper fruit = ', fruit 

파일 helper.py : controller.py

#module controller 
import settings 
import helper 

class Controller(object): 
    def __init__(self): 
     settings.set_fruit('apple') 
     print 'Controller: settings.fruit = ', settings.fruit 

Controller() 
print 'fruit = ', settings.fruit 
helper.Helper() 

settings.py 글로벌 설정이 다양한 모듈에서 사용됩니다. 이러한 설정 중 일부는 컨트롤러가 시작하는 동안 변경해야합니다. 컨트롤러에 의해 변경된 설정이 다른 사람에게 보이지 않는 이유를 알고 싶습니다 (이 경우 도우미 모듈). 여기

내가 얻을 출력 :

$ python controller.py 
Setting fruit banana to apple 
Controller: settings.fruit = apple 
fruit = apple 
Inside Helper fruit = banana 

답변

1

당신이 settings.fruit 이름과 별도의 당신의 helper 모듈에 새로운 fruit 이름을 생성 from settings import fruit을 순간. 단지 동일한 객체를 참조하기 만합니다.

settings.set_fruit() 메서드는 settings.fruit에 새 개체를 가리 키도록 리 바인드하지만 helper.fruit 참조는 적합하지 않습니다. 그것은 결국 별개입니다.

이 모든

가 값을 참조하는 두 개의 분리 된 지역 변수를 생성 다르지 않다 :

fruit = 'banana' 
another_fruit = fruit 
fruit = 'apple' 
print another_fruit 
더 - 주변의 일이 당신이 controller 모듈에 무슨 짓을하는 것입니다

; 모듈의 속성으로 settings 내의 참조 이름 만 사용하십시오. 그렇게하면 항상 하나의 참조 만 사용하게됩니다. 다른 모듈에서 공유되는 것은 settings 모듈에 대한 참조입니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 그것은 그것을 설명합니다. – TRam