파이썬

[파이썬] __all__ 특수 변수

보리콩 2021. 6. 3. 13:40

import * 

모듈을 임포트할 때 from <modlue> import * 를 하면 모듈의 모든 내용이 임포트된다. 하지만 모듈 대신 패키지에 from <package> import *를 하면 패키지 안에 있는 게 아무것도 임포트되지 않는다.

 

 

__all__특수 변수

import * 를 했을 때 임포트 대상에서 어떤 것들을 가져와야 하는지 정해주는 변수다. 말하자면 '전체'가 무엇인지 정의해주는 변수인 셈. __all__은 모듈과 패키지에 모두 적용된다.

 

 

__all__과 모듈

모듈의 __all__은 모듈에 해당하는 파일에서 정의한다. 예를 들어 area.py에 아래와 같은 코드를 추가하면 

 

shapes/area.py

# __all__ 정의
__all__ = ['circle', 'square'] 

PI = 3.14

# 원의 면적을 구해 주는 함수
def circle(radius):
    return PI * radius * radius  

# 정사각형의 면적을 구해 주는 함수
def square(length):
    return length * length

from shapes.area import *를 했을 때 area 모듈의 모든 내용이 임포트되지 않고 circle과 square함수만 임포트된다.

 

 

__all__과 패키지

패키지의 __all__은 패키지에 해당하는 init 파일에서 정의한다. 예를 들어 shapes 패키지의 init 파일에 아래와 같은 코드를 추가하면

 

shapes/__init__.py

# __all__ 정의
__all__ = ['area', 'volume']

이제 from shapes import *를 하면 area 모듈과 volume 모듈이 임포트된다. 

 

__all__을 사용하면 패키지나 모듈에 import *를 했을 때 어떤 것들이 임포트 되는지 제어할 수 있다. 그래도 정확이 어떤 것이 임포트 되는지 알기 힘들기 때문에 네임스페이스를 완벽히 이해하고 있을 때 사용하는 것을 추천한다고 한다!