반응형
질문
나는 __init__.py
파일에서 __all__
을 본다. 이것은 무엇을 하는 것인가?
답변
여기서 명시적으로 언급되지는 않았지만, __all__
이 사용되는 경우가 바로 이 때문입니다. 모듈의 기호가 언제 내보내지는지를 정의하는 문자열 목록입니다. 모듈에서 from <module> import *
가 사용될 때 내보낼 것입니다.
예를 들어, 다음 코드는 foo.py
에서 bar
와 baz
기호를 명시적으로 내보냅니다.
__all__ = ['bar', 'baz']
waz = 5
bar = 10
def baz(): return 'baz'
그런 다음이러한 기호를 다음과 같이 가져올 수 있습니다.
from foo import *
print(bar)
print(baz)
# 다음은 모듈에서 내보내지 않은 "waz"로 인해 예외가 발생합니다.
print(waz)
__all__
이 위에서 주석 처리된 경우,이 코드는 주어진 네임 스페이스에서 밑줄로 시작하지 않는 모든 기호를 가져 오는 기본 동작으로 완료됩니다.
참조 : https://docs.python.org/tutorial/modules.html#importing-from-a-package
참고 : __all__
은 from <module> import *
동작에만 영향을 미칩니다. __all__
에 언급되지 않은 멤버는 모듈 외부에서 여전히 액세스 할 수 있으며 from <module> import <member>
를 사용하여 가져올 수 있습니다.
반응형
댓글