개발

__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