2017-03-22 1 views
0

디버깅 할 때 from module import *이 유용합니다. 그러나 공공 기능 만 가져 오는 것으로 보입니다. _으로 시작하는 함수는 가져 오지 않지만 그 함수를 가져오고 싶습니다.가져 오기 *를 사용하여 개인 기능을 가져 오는 방법은 무엇입니까?

모든 개인용 기능을 가져 오는 방법은 무엇입니까?

편집 나는 import *은 일반적으로 나쁜 관행입니다 완전히 알고 있어요, 그러나 때때로 나는 긴급한 생산 문제를 파악하고 해결하기 위해 필요하고 중요한 시간을 절약 할 수 대화 형 디버깅 할 때 import *를 사용하여.

+4

해결책은'import *'를 사용하지 않고 * module *을 가져온 다음'module._foo'로 필요한 것을 참조하십시오. –

답변

1

from module import *은 기본적으로 모두 이름을 가져 오는 데에만 사용됩니다. 가져올 이름을 명시 적으로 제어해야하는 경우 모듈 전역에 이름 (문자열)으로 구성된 __all__ 시퀀스를 지정하십시오. 당신은 그 목록에 개인 이름을 추가 할 수 있습니다 :

__all__ = ['PublicClass', 'public_function', '_private_function'] 

그러나, 더 나은 대안이 전혀 from module import *을 사용하지 않는 것입니다. 형제 모듈의 개인 이름에 의존하는 코드는이를 명시 적으로 가져와야합니다.

from module import *을 사용하는 것은 일반적으로 싫은 냄새가납니다. 사용자 이름과 가져온 사람 (정적 코드 검사기) 모두에서 코드를 확인하는 것이 훨씬 어렵 기 때문에 가져온 이름과 가져온 이름을 확인할 수 없습니다 를 찾을 수 없다.

+0

감사합니다.하지만 소스 코드에 대한 쓰기 권한이 없으면 어떻게해야합니까? – mchen

+0

@mchen : 명시 적 가져 오기 만 사용하십시오. 'from module import _private_name'을 참조하십시오. –

+0

@mchen : 당신이 * 반드시 *'module .__ all__'을 설정할 수 있지만 정말 지루한 수입 라인 하나를 추가해야한다면? –

관련 문제