2014-10-14 2 views
0

내가, 파이썬 파일에 설정을 저장과 같이하고있어 말 : 이제계산 문자열 값이 동적으로

#!/usr/bin/env python 
# 
# settings.py 

import os 

LOG_DIR = '/tmp' 
LOG_FILE_MAIN = os.path.join(LOG_DIR, 'main.log') 

, 나는이 포함되도록하고, 값 중 하나를 변경과 같은 파일 :

#!/usr/bin/env python 
# 
# main.py 

import settings 

settings.LOG_DIR = '/home/myuser' 

(지금 변경된) "참조"변수에 의존하는 변수를 출력 할 때 값이 변하지 않았 음을 알 수 있습니다.

print(settings.LOG_FILE_MAIN) 

반환됩니다

/tmp/main.log 

대신에 :

/home/myuser/main.log 

이 (파이썬은 이미 문자열 값을 계산했다) 왜 나는 이해하지만 내가 해결해야합니다. 클래스를 만들고 __setattr__ 함수를 재정의하는 것 이외에 원하는 결과를 얻을 수있는 방법이 있습니까?

+0

문자열 대신 값 사전을 사용할 수 있습니다. – Celeo

+0

이것은 문자열을 변경할 수 없다는 것과 아무런 관련이 없습니다. –

+0

사실, 그렇지 않습니다. 내 실수. – stephenfin

답변

1

파이썬은 이미 표현식 설정 LOG_FILE_MAIN을 실행했으며 입력 중 하나를 변경했기 때문에 다시 설정하지 않습니다. 식의 결과이 저장되며 식 자체는 저장되지 않습니다.

다른 변수를 수동으로 다시 설정해야하거나 나중에 함수로 계산해야합니다 (항상 LOG_DIR에서 계산되어야합니다). 예 : LOG_FILE_MAIN은 설정에 포함되어서는 안되지만 항상 필요에 따라 설정에서 계산해야합니다. 나는 대체물보다 낮은 기술 접근법을 선호하는데, 은 함수를 덮어 쓰거나 그렇지 않으면 모든 핵심 속성을 설정자로 처리해야합니다.을 수행해야합니다.

또 다른 접근법은 formatting operations을 사용하는 것입니다. A A str.format() call에 키워드 인수로 적용 전체 settings 모듈을해야 문자열로 LOG_FILE_MAIN 정의 : 다음

LOG_FILE_MAIN = '{LOG_DIR}/main.log' 

하고 LOG_FILE_MAIN를 사용해야 할 때마다 수행

settings.LOG_FILE_MAIN.format(**vars(settings)) 

선택적으로 디렉토리를 적용 분리 자 변환 단계를 수행하여 플랫폼 특정화를 수행하십시오.