파이썬

[파이썬] __init__

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

__init__파일

패키지 안에는 __init__.py라는 파일이 있다. 파이썬 3.3 이전 버전에서는 init파일이 필수였지만 이후 버전부터는 필수가 아니게 돼었다. 하지만 파이썬 하위 번전과의 호환성과 패키지의 명확성을 위해 항상 init파일을 만드는 것을 권장한다고 한다. 

 

init은 initialiaze의 약자로 패키지나 패키지 안에 있는 것을 import하면 가장 먼저 패키지의 init 파일에 있는 코드가 실행된다.

 

 

__init__파일 활용

__init__ 파일에서 임포트 사용

패키지를 임포트하면 기본적으로 패키지 안에 있는 내용은 임포트되지 않는다. 패키지를 임포트할 떼 패키지 안에 있는 내용도 함께 임포트하고 싶다면 init 파일에 패키지와 함께 임포트 하고 싶은 것들을 써 주면 된다.

 

shapes/__init__.py

from shapes import area, volume

그러면 이제 shapes패키지를 임포트하면 area랑 volume 모듈도 함께 임포트된다. area랑 volume 모듈은 아래와 같이 접근할 수 있다.

 

run.py

import shapes

print(shapes.area.circle(2))
print(shapes.volume.sphere(2))

 

 

그리고 모듈 대신 모듈의 함수들을 임포트 할 수도 있다.

shapes/__init__.py

from shapes.area import circle, square

run.py

import shapes

print(shapes.circle(2))
print(shapes.square(3))

shapes 패키지 안에서 함수들을 직접 가져왔으므로 호출하지 않아도 된다. 이처럼 init 파일에서 임포트되는 것은 항상 package. 으로 접근할 수 있다.

 

 

__init__파일에서 변수 정의하기

상수 PI 처럼 여러 모듈에서 사용되는 것들은 각 모듈에서 정의하기 보단 패키지 안에서 한 번만 정의해주는 것이 좋다. 

 

shapes/__init__.py

PI = 3.14

shapes/area.py

from shapes import PI

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

shapes/volume.py

from shapes import PI

# 구의 부피를 구해 주는 함수
def sphere(radius):
    ...

이처럼 패키지의 init파일에서 PI를 정의한 후 각 모듈에서 임포트하여 사용하면 된다. 그리고 패키지의 init 파일에서 정의되는 것들은 패키지 밖에서도 사용할 수 있다.

 

run.py

# PI 직접 임포트
from shapes import PI

# 패키지 임포트 후 shapes. 으로 접근
import shapes
shapes.PI