Skip to content

Latest commit

 

History

History
96 lines (70 loc) · 2.46 KB

2022.07.09.md

File metadata and controls

96 lines (70 loc) · 2.46 KB

init 파일에서 변수 정의하기


패키지 내의 여러 모듈에서 공통적으로 쓰이는 변수가 있다면 (예를 들어 shapes 내의 area, volume ... 등에서 쓰이는 PI 변수) 그 변수는 각각의 모듈 내에서 매번 정의하기보다 init 파일에서 한 번 정의해 준 후에 각각의 모듈에서는 import해주기만 하는 게 더 효율적이고 실수를 줄일 수 있는 방법이다.

init.py

PI = 3.14
from shapes import area, volume

area.py

from shapes import PI

def circle(radius):
    return PI * radius * radius

def square(length):
    return length * length

이런 식으로 말이다.



특수변수 all


*(스타)를 통해 패키지 내의 모든 모듈을 import하려고 하면 제대로 되지 않는다.

run.py

from shapes import *

이것은 패키지에서 all 특수변수가 정의되지 않았기 때문이다. 해결하려면

init.py

__all__ = ['area', 'volume']
PI = 3.14
from shapes import area, volume

이런 식으로 init 파일에서 미리 all을 정의해 줘야 한다.

마찬가지로 모듈 내에서도 all을 정의할 수 있다. 그러면 from (모듈이름) import * 이런 식의 문법을 사용했을 때 그 모듈 내의 어떤 변수, 어떤 함수, 어떤 클래스들을 import할 것인지 정의할 수 있다.


import하는 두 가지 방식


단순 import

# 패키지 임포트
import mymath

# 서브패키지 임포트
import mymath.shapes

# 모듈 임포트
import mymath.shapes.area

# 모듈 안에 있는 변수나 함수는 이 방식으로 임포트 할 수 없음 
import mymath.shapes.area.circle # 오류

이 방식으로 import 했을 때는 사용하기 위해서 import에 썼던 그대로 사용해야 한다.

mymath.shapes.area.circle(3)

from import 방식

# 패키지 안에 있는 패키지 임포트
from mymath import shapes

# 패키지 안에 있는 모듈 임포트
from mymath.shapes import area

# 모듈 안에 있는 함수 임포트
from mymath.shapes.area import circle

# import 뒤에는 . 을 쓸 수 없음 
from mymath import shapes.area # 오류

상대 경로 import


상대경로는 항상 . 아니면 ..으로 시작한다. '.'은 현재 파일이 위치한 디렉토리를 의미하고 '..'은 현재 파일이 위치한 디렉토리보다 한 단계 더 높은 상위 디렉토리를 의미한다.