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만원