티스토리 뷰
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
- 코드
- python
- 그래프
- 금리
- sql
- 코딩테스트
- 보안
- 코딩
- 파이썬
- 데이터
- SW
- 프로그래밍
- 경제신문
- 자바
- 데이터분석
- mysql
- 영어회화
- 경제
- 스마트워치
- R
- 영어
- 코테
- Programming
- 클래스
- plot
- 머신러닝
- 프로그래머스
- 개발
- 모듈
- 함수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |