필자가 작성한 Python 라이브러리가 있습니다. 라이브러리의 작동 방식을 변경하는 변수 세트가 있습니다. 테스트 할 때 모두 정상적으로 작동했지만 변수 python lib.py install
이 변수에 영향을주지 않습니다.라이브러리는 설치 여부에 따라 다르게 동작합니다.
도서관 :
이##lib.py
config="Original"
def run():
print config
스크립트 : 스크립트와 같은 디렉토리에 라이브러리를 배치하고 실행하면
import lib
lib.config="New"
lib.run()
print lib.config
가 출력이 나는 가능한 가장 간단한 예에이 고장 :
New
New
그러나 라이브러리를 설치 한 다음 dis 라이브러리 t 패키지 출력은 다음과 같습니다.
Original
New
누군가가 무슨 일이 일어나는지 설명 할 수 있습니까? 나는 약간의 혼란 스러움과 끔찍한 사건과 이유에 관심이있다. 또한 나는 완전히 잘못된 프로그래밍 구성을하고 있습니까?
편집
이 문제가 초기화 평 파일입니다 밝혀졌습니다. 기본적으로 다른 라이브러리를 가져 오는 라이브러리를 가져 오는 것과 같습니다. 설치된 모듈을 가져올 때 lib
폴더와 .py 파일을 봅니다. 초기화 .py는 단 하나의 라이너 from lib import *
입니다. 단순히 실제 라이브러리 인 척하지만 전역 변수를 사용하면 이상한 문제가 발생합니다. 본질적으로 무슨 일이 일어나고 있는지의 시뮬레이션 예 :
##init.py
from lib import *
스크립트 :
import init
init.config = 'New'
init.run()
print init.config
출력
:
Original
New
함수 실행이() lib.py에서 config
를 찾지 만 print init.config
init.py에서 찾는다. 모두 도움을 주셔서 감사합니다. 수정은 모듈 설치 방법을 변경하는 것입니다 (초기화 .py). 결국 모든 전역 변수를 제거하기를 희망하지만 당분간 모든 것이 완벽하게 작동합니다.
구성은 정적으로 수행해야하는 실제적인 이유가있는 경우가 아니면 일반적으로 개체 단위 인스턴스가 아닌 정적 (전역)이어야합니다. 그리고 그때조차도, 객체 인스턴스는 어떤 종류의 전역 설정을 무시하는 것을 지원해야합니다. – cdhowie
또한이 문제는 Python 2.6.6에서 재현 할 수 없습니다. – cdhowie
@trydyingtolive 설명하는 내용이 그럴듯 해 보이지 않습니다. –