파이썬 문서 및 다양한 메일 링리스트를 읽을 때 나는 항상 교리 적으로 보이는 것을 읽습니다. 글로벌 변수는 지옥과 같이 피해야합니다. 디자인이 좋지 않습니다 ... 좋습니다. 왜 안 되니? 그러나 그러한 패턴을 피하는 방법이없는 현실적인 상황이 있습니다.전역 변수를 피하는 방법
주 메뉴에서 여러 파일을로드 할 수있는 GUI가 있다고 가정 해보십시오. 로드 된 파일에 해당하는 파일 객체는 모든 GUI (예 : 이미지를 표시하고 다양한 대화 상자/플러그인을 통해 다양한 작업을 수행 할 수있는 이미지 뷰어)를 사용하여 사용할 수 있습니다. >로드 된 파일 개체를 사용할 수 있습니다 -
- Menu.py을 : 는 다음과 같은 설계를 구축 정말 뭔가 문제가 있습니까 여기
- Dialog1.py -> 또는 여기
- Dialog2.py -> 또는이
- Dialog3.py -> 또는이
- ...
- Globals.py Globals.py 키로드 된 파일과 값에 해당하는 파일 객체의 이름입니다 사전을 저장합니다
. 그런 다음, 그 데이터를 필요로하는 코드의 다양한 부분이 약한 참조를 통해 액세스합니다.
미안 내 질문에 어리석은 것처럼 보일 수도 있지만 우아하고 포괄적 인 대안이 보이십니까? 한 가지 방법은로드 된 데이터 딕셔너리를 Main.py의 메인 애플리케이션 클래스에 캡슐화하는 것입니다. 그러나이 클래스는 데이터를 필요로하는 모든 대화 상자에서 쉽게 액세스 할 수 있어야하기 때문에 몇 가지 문제가 발생할 수 있습니다.
은 코드 재사용을 억제하기 때문에
전역 변수가 악의가 없습니다. 악의는 그것을 가변 변수로 사용하고 있습니다. 전역 변수는 가능할 때마다 정적이고 "불변"상태를 유지해야합니다. globals.py에서 사전 내용을 변경해야한다면 좋지 않습니다. 그 외, 독서는 괜찮습니다. – CppLearner
예, 글로벌 "상수"는 괜찮습니다. 글로벌 "변수"는 피해야합니다. – monkut
그래, 둘 다 무슨 뜻인지 알 겠어.로드 된 데이터 딕셔너리가 시간 (새로운로드 된 파일, 삭제 된 파일)을 통해 진화 할 수있는 제안 된 디자인 대신 유효한 파이썬 대안을 보지 못한다. – Eurydice