TIL DAY 7 || __init__.py 의 역할

TK·2021년 2월 21일
0

TIL

목록 보기
8/55

__init__.py 의 역할

  • import 할때 경로의 총 길이를 줄여준다.
  • 패키지에서 import 할 수 있는 변수/함수/클래스 를 제한한다.
  • 그 외 패키지가 import 될 때 꼭 먼저 실행되어야 하는 코드들을 관리한다.

import 시 경로길이 단축

import pkg.mod1

pkg.mod1.func1()

이 코드에서 func1() 를 사용하기 위해 모든 경로를 다 적어줘야 한다. 하지만 다음을 보자.



# __init__.py
from .mod1 import func1

이렇게 __init__.py 에서 직접 func1 를 호출한다면

# main.py
from pkg import func1

func1()

main.py 에서 함수 이름으로 곧바로 호출할 수 있다.

import 할 수 있는 변수/함수/클래스 제한

  • 특정 모듈의 모든 함수가 외부로 노출되어서는 안되는 경우도 있다.
  • 내부적으로만 사용되어야 하는 경우도 있을 수 있는데
  • 이 때 __init__.py__all__ 변수를 통해 패키지 외부에서 import 할 수 있는 변수/함수/클래스 를 설정할 수 있다.

__all__ 변수 설정

  • 패키지에서 import 될 수 있는 요소들은 모두 __all__ 변수를 통해 제어된다.

  • __all__ 의 default 값은 패키지의 모든 변수/함수/클래스 이다. 즉 해당 변수를 건들지 않는 이상 모든 요소에 접근해서 import 할 수 있다.

  • import 되길 원하는 요소들을 아래와 같이 string 으로 list에 선언해주면 된다.

# __init__.py
from .mod1 import func1
from .mod2 import func2

__all__ = ['func1', 'func2']
# main.py
from pkg import *

func1()
func2()
func10() # func10 함수는 __all__ 에서 정의되지 않았으므로 import 시 에러가 발생한다.
profile
Backend Developer

0개의 댓글