파이썬은 다음과 같은 가장 바른 네임 스페이스를 가지고 있습니다.파이썬 네임 스페이스가 빌트인과 글로벌 사이에 있습니까?
내장 -이 네임 스페이스는 전체 인터프리터와 인터프리터 인스턴스 내에서 실행되는 모든 스크립트에서 전역입니다.
전역 -이 네임 스페이스는 모듈 전체에서 전역으로, 즉 단일 파일에서 사용됩니다.
나는이 두 부분 사이에서 네임 스페이스를 찾고 있는데, 여기서 네임 스페이스는 메인 스크립트 내에서 선언 된 몇 가지 변수를 호출하는 모듈에 공유 할 수 있습니다. 예를 들어
, script.py :
import Log from Log
import foo from foo
log = Log()
foo()
foo.py :
내가 script.py 여러 번하고 각각의 경우에 전화를 걸 수 있으려면def foo():
log.Log('test') # I want this to refer to the callers log object
, 모듈 수준을 노출 foo 메소드에 객체를 기록하십시오.
가능하다면 어떤 아이디어가 있습니까?
로그 객체를 전달하는 것은 그리 고통스럽지 않지만 Javascript에서 포팅 된 많은 양의 코드로 작업하고 있습니다. 또한 foo 호출자가 로그 객체를 노출하도록 제약 조건을 설정한다는 것을 이해합니다.
감사합니다, 폴
위대한 답변을 주셔서 감사합니다. – Paul
이 기능을 가지고 놀고 나면, 모듈이 builtins와 동일한 네임 스페이스에서 공유되는 것처럼 보이기 때문에 찾고자하는 것이 아닙니다. 두 가지 스크립트를 동시에 실행하면 각 모듈이 만든 모듈의 내용이 바뀔 수 있습니다 .- ( 세계의 끝이 아니라 일련의 인터페이스를 업데이트해야합니다. 감사합니다. – Paul
@Paul 물론, 모든 모듈은 다른 모든 모듈의 내용을 변경할 수 있습니다. 호출자가 선호하는 로그 객체를 참조하기 위해'yay.log' (어디에서 액세스했는지)를 원하면 호출자는' IOW, 인수를 전달하는 것은 이상한 방법입니다 (호출자가 지정한대로 '가져 오기'를 수행하도록 함으로 암시되는 원형 교차로가 아니라 인수 _를 전달하면 훨씬 명확 해집니다). –