티스토리 뷰

파이썬/모듈

__all__특수 변수 정리

코린이도이 2021. 4. 6. 16:18

shapes 패키지 구조

shapes
	__init__.py
    	area.py
        volume.py

shapes/area.py

PI = 3.14

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

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

shapes/volume.py

PI = 3.14

# 구의 부피를 구해 주는 함수
def sphere(radius):
    return (4/3) * PI * radius * radius * radius

# 정육면체의 부피를 구해 주는 함수
def cube(length):
    return length * length * length

 

import *

모듈을 임포트할 때 from <module> import *를 하면 모듈의 모든 내용이 임포트 됨

하지만 모듈 대신 패키지에 from <package> import *를 하면 패키지 안에 있는 것이 아무것도 임포트되지 않음

 

__all__ 특수 변수

__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 *를 했을 때 어떤 것들이 임포트되는지를 제어할 수 있음, 그래도 여전히 import * 만 봐서는 정확히 어떤 것들이 임포트되는지를 알 수 없기 때문에 import *는 프로그램에서 정의되는 이름들, 즉 네임 스페이스를 완벽히 이해하고 있을 때만 사용하는 것을 추천함

'파이썬 > 모듈' 카테고리의 다른 글

서브패키지 정리  (0) 2021.04.06
__init__ 파일 정리  (0) 2021.04.02
패키지 정리  (0) 2021.04.02
main() 함수  (0) 2021.04.01
스크립트 vs 모듈  (0) 2021.04.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함