[Python] __init__.py에 __all__을 정의해 외부에 노출되는 객체나 모듈을 제어하는 방법

KangHo Lee's avatar
May 30, 2025
[Python] __init__.py에 __all__을 정의해 외부에 노출되는 객체나 모듈을 제어하는 방법
__init__.py__all__을 정의하면 from mypackage import * 했을 때 어떤 모듈이나 객체가 외부로 노출될지 제어할 수 있습니다.

📦 예시 구조

mypackage/ │ ├── __init__.py ├── module_a.py └── module_b.py

📄 module_a.py

def func_a(): print("Function A") def hidden_a(): print("Hidden A")

📄 module_b.py

def func_b(): print("Function B")

📄 __init__.py

from .module_a import func_a from .module_b import func_b __all__ = ['func_a'] # func_b는 import * 시 노출되지 않음

✅ 사용 예시

from mypackage import * func_a() # ✅ 사용 가능 func_b() # ❌ NameError: func_b is not defined

🔎 요약

  • __all__import *에서 **외부에 노출할 심볼(변수, 함수, 클래스, 모듈 등)**을 문자열 리스트로 지정
  • 실제 모듈 안에 정의된 모든 항목이 아니라, __all__에 적힌 항목만 가져옴
 
Share article

devleekangho