개발
__init__.py 를 이용한 모듈 관리
kwony
2024. 5. 8. 10:17
파이썬 3.3 이전에는 __init__.py 는 디렉토리가 파이썬 패키지임을 명시할 때 필요했었다면 이제는 __init__.py 가 없어도 없어도 자동으로 디렉토리를 패키지로 인식한다.
대신에 __init__.py 를 사용하면 패키지 내부에 있는 클래스 선언을 하나로 모아줄 수 있는 장점이 있다.
이런 프로젝트 구조를 가지고 있고
├── main.py
└── phone
├── galaxy.py
└── iphone.py
galaxy.py 와 iphone.py 에서 각각 클래스를 선언했다면
# galaxy.py
class Galaxy:
def __init__(self) -> None:
pass
# iphone.py
class Iphone:
def __init__(self) -> None:
pass
main.py 에서 두개의 클래스를 임포트 할 때 아래처럼 파일명까지 명시해야한다.
# main.py
from phone.galaxy import Galaxy
from phone.iphone import Iphone
물론 이렇게도 사용하는데 문제는 없다. 그러나 논리적으로 패키지를 구분했던 목적에서 봤을때 phone 디렉토리에서 Galaxy 와 Iphone 을 임포트하는게 자연스럽다.
__init__.py 를 활용하면 파일명까지 내려갈 필요 없이 phone 패키지 까지만 명시하고 임포트 할 수 있다.
먼저 __init.py__ 를 phone 디렉토리에 생성하고 아래 처럼 미리 임포트를 시킨다
# __init.py__
from .galaxy import Galaxy
from .iphone import Iphone
그러면 main.py 에선 파일명까지 임포트하지 않고도 phone 패키지 내부 클래스를 임포트할 수 있다.
# main.py
from phone import Galaxy
from phone import Iphone