확장/C1phr의 대답은 명확하게하려면 둘 다 A, B,도 C는 state
에 새로운 값을 할당하지 않기 때문에 세 가지 모듈에서
state
만큼 같은 객체를 참조 할 것. 세 모듈 중 하나라도 state = <something else>
을 수행하면 동기화되지 않습니다. 모듈을 값을 변경 (예 : state['blah'] = 'stuff'
)하여 새 값을 지정하지 않아도됩니다.
C1phr이 말한 것처럼 a.state
(b
및 c
에서)과 같이 변수를 항상 포함하는 모듈을 통해 변수를 참조하여이를 방지 할 수 있습니다.
이론적으로 하나의 모듈을 다시로드하여 변수를 동기화 해제 할 수있는 방법이 있지만 일반적이지 않거나 바람직하지 않을 수 있습니다. 예를 들어 누군가가 reload(a)
을 수행하면 a
이 다시로드되고 b 및 c는 이에 대해 알 수 없습니다. 그러나 이것은 비정상적인 일입니다. 또한 모듈이 imported twice via different paths 일 수 있으므로 두 버전을 추적하지 않은 경우 변수 이처럼 보이지 않을 수도 있습니다. 그러나 같은 모듈을이 방법으로 두 번 가져 오는 것은 어쨌든 항상 실수입니다.
현재 : 상태 공유에 대한 귀하의 목적은 무엇입니까? 합법적 인 이유가 있지만, 일반적으로 이런 종류의 것은 나쁜 생각입니다. –
필자는 응용 프로그램의 다른 부분에서 사용되는 파이썬 라이브러리를 작성했습니다. 가져 오기 시간에 라이브러리는 라이브러리의 일부 기능 작동에 영향을주는 몇 가지 구성을 읽습니다. 나는 어디서나 똑같은 행동을하도록해야합니다. – smatting
합리적인 것 같습니다. 필자가 설정 파일을 읽는 라이브러리를 좋아하지는 않지만 (앱에서 그렇게하지 않는 한), 때로는 가장 실용적인 접근 방법입니다. –