1)__all__변수가 뭐에요?
__init__.py 파일 내 __all__변수에 지정하는 것으로 모듈에서 다른 모듈이나 패키지로 공개할 이름들을 지정하는 변수입니다. 이 변수를 사용하여 해당 모듈이나 패키지를 import할 때 어떤 이름들이 직접적으로 import될지를 명시할 수 있습니다.
일반적으로 "import *" 이와같이 모든 자원을 임포트 하는 경우 __all__변수를 사용하여 사용할 모듈을 지정해 주어야 합니다.
아래와 같이 __init__.py 파일에 __all__ 변수를 사용하여 다른 모듈에서 사용할 수 있도록 모듈을 지정할 수 있습니다. 아래 예의 경우 thailand 모듈을 다른 모듈에서 사용할 수 있도록 설정하고 있습니다.(아래 디렉토리 구조 참조)
__init__.py
__all__ = ["thailand"] |
main.py 에서 travel패키지의 모든 자원을 사용하려면 아래와 같이 코딩합니다.
main.py
from travel import * trip_to = thailand.ThailandPackage() trip_to.detail() |
만일 __init__.py 파일의 __all__변수에 thailand만 지정되어 있는데, 아래와 같이 코딩한 경우 에러가 발생하는데, 이는
__all__변수에 vietnam이 지정되어 있지 않기 때문입니다.
__init__.py
__all__ = ["thailand"] |
main.py
from travel import * trip_to = vietnam.VietnamPackage() # 에러 발생, __init__의 __all__변수에 지정해줘야 함 trip_to.detail() |
NameError: name 'vietnam' is not defined
아래와 같이 __all__변수에 vietnam 추가로 지정하면 main.py파일 실행시 에러가 발생하지 않습니다.
__init__.py
__all__ = [ "thailand" , "vietnam"] |
main.py
from travel import * trip_to = vietnam.VietnamPackage() # 권한 등의 문제로 사용하지 못함, __init__에서 지정해줘야 함 trip_to.detail() |
베트남 패키지 입니다. <-- 에러 발생하지 않음
마찬가지로 __init__.py 파일의 __all__변수에 vietnam만 지정되어 있는데 아래와 같이 타일랜드 모듈에 접근하려고 하면 에러가 발생합니다.
trip_to = thailand.ThailandPackage()
__init__.py
__all__ = ["vietnam"] |
from travel import * trip_to = thailand.ThailandPackage() trip_to.detail() |
NameError: name 'thailand' is not defined
따라서 아래와 같이 __init__.py 파일의 __all__변수에 vietnam와 thailand를 함께 지정해 주어야 합니다.
__init__.py
__all__ = ["vietnam", "thailand"] |
from travel import * # trip_to = vietnam.VietnamPackage() # 권한 등의 문제로 사용하지 못함, __init__에서 지정해줘야 함 trip_to = thailand.ThailandPackage() trip_to.detail() |
태국 패키지 입니다. <-- 에러 발생하지 않음
'파이썬 강좌(초급) > 10.모듈과 패키지' 카테고리의 다른 글
10.모듈과 패키지 - 6) 패키지 및 모듈 설치 (pip install ~~~) (0) | 2024.05.04 |
---|---|
10.모듈과 패키지 - 5) 패키지 및 모듈 위치 찾기 (0) | 2024.05.04 |
10.모듈과 패키지 - 4) if __name__ == "__main__": (0) | 2024.05.04 |
10.모듈과 패키지 - 2) 패키지 (0) | 2024.04.14 |
10.모듈과 패키지 - 1) 모듈 (0) | 2024.04.14 |