python
[python] __all__
bbiyak2da
2025. 6. 5. 13:50
__all__
__all__은 Python 모듈에서 from module import * 구문으로 import할 때,
어떤 이름(name)들을 외부에 공개할지를 정의하는 리스트입니다.
즉, 모듈 외부에서 접근 가능하도록 허용할 식별자들을 명시적으로 지정하는 용도입니다.
💡 중요한 특징
- __all__은 from module import * 구문에서만 영향을 미칩니다.
- import mymodule 또는 from mymodule import func2처럼 명시적으로 import하는 경우에는 __all__이 영향을 주지 않습니다.
- __all__을 정의하지 않으면, from module import *는 언더스코어(_)로 시작하지 않는 이름들만 import합니다.
✅ 언제 쓰는가?
- 모듈 또는 패키지를 라이브러리처럼 사용할 때, 공식적인 API만 외부에 노출하고 싶은 경우
- 의도치 않게 내부 함수나 클래스가 외부에 노출되는 걸 방지하고 싶을 때
실습
1. __all__ 사용 경우
# vietnam.py
class VietnamPackage:
def detail(self):
print("[베트남 패키지 3박 5일] 다낭 효도여행 60만원")
# __init__.py
__all__ = ["vietnam"]
# practice.py
from travel import *
trip_to = thailand.ThailandPackage()
trip_to.detail()
[베트남 패키지 3박 5일] 다낭 효도여행 60만원
2. __all__ 을 사용하지 않았을 경우
# thailand.py
class ThailandPackage:
def detail(self):
print("[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원")
# practice.py
from travel import *
trip_to = thailand.ThailandPackage()
trip_to.detail()
Traceback (most recent call last):
File "c:\Users\~\Desktop\PythonWorkspace\practice.py", line 6, in <module>
trip_to = thailand.ThailandPackage()
^^^^^^^^
NameError: name 'thailand' is not defined
에러가 뜬당,,
# __init__.py
__all__ = ["thailand"]
추가 후 다시 practice.py 파일 실행
[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원