2016-06-08 9 views
1

모듈 그 자체 인을 가져올 때 모듈 내부에서 함수를 트리거하려고합니다.모듈 가져 오기 확인

내가 테스트 한 바에 의하면 __name____main__이 아닌지 확인할 수 있으며이를 솔루션으로 사용합니다. 그러나 나는 수입 고리의 어떤 종류를 가진 더 나은 방법이 있는지 생각해보고 있었습니까?

if __name__ != '__main__': 
    # I was imported 
    ... 

이 특정 사례의 모듈에있는 개체를 수정하고 한 번만 수정하고 싶습니다.

나는 이것으로 성공했습니다. 그러나 이것에 접근하는 또 다른 방법이 있는지 궁금합니다.

if __name__ == '__main__': 
    example = 0 
else: 
    example = 1 
+1

가져올 때마다 또는 인터프리터 당 처음에만이 작업을 수행 하시겠습니까? – user2357112

+0

가능한이 중복의 [this] (http://stackoverflow.com/questions/5027352/how-to-test-if-one-python-module-has-been-imported) – limbo

+1

@limbo 그 질문은에서 온 것이 아닙니다. 올바른 관점; 나는 모듈의 관점에서 그것을 원한다. – jacob

답변

1

파이썬 실행의 최상위 로직은 가져 오기를 한 번 수행합니다. 예제는 여기에 stdlib hashlib 구현에서 찾을 수 있습니다 (github이 순간적으로 중단되었습니다). https://fossies.org/dox/Python-3.5.1/hashlib_8py_source.html#name=l00131

주의 조건부 수입 try...except의 사용 및 라인 # 57

57 __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512') 
58 
59 algorithms_guaranteed = set(__always_supported) 
60 algorithms_available = set(__always_supported) 
사람들은 수입 한 번 만들어

하지 후속 호출에서 시작 최상위 라인. 이런 방식으로 작동하는 이유 중 하나는 모듈이 객체이고 sys.modules - Py2 but same for Py3에 저장된다는 것입니다.

편집 : singletons과 같은 모듈을 사용할 수 있음을 명확히하기 위해 단위 테스트 및 디버깅을 불가능하지는 않지만 불가능하게 만들 수있는 광기의 길입니다.

+0

답변 해 주셔서 감사합니다. 나는 내 질문에 충분히 구체적이지 않다고 믿는다. 나는 그것을 수정 한 이후에 내가 찾고있는 것들로 더욱 철저히 연구되고있다. – jacob

+0

@jacob 그게 파이썬이 정확히 어떻게 테스트하는지, 단위 테스트 나 \ _ \ _ main \ _ \ _을 구현하는 응용 프로그램과 같은 상황에 있습니까? 아니면 질문에 뭔가 빠졌습니까? – David

+0

@jacob 어리석은 것처럼 보이지만 작동하고 누군가가하는 일을 이해할 수 있다면 여전히 바보 일 수도 있지만 작동합니다. – David