__init__
py
__init__
.py 파일은 Python에서 특별한 용도로 사용되며, 주로 두 가지 주요 기능을 수행한다.
- 패키지 초기화: Python에서 디렉토리를 모듈처럼 가져올 수 있게 만든다. 이 파일이 있는 디렉토리를 Python 패키지로 인식하게 해서, 그 안의 모듈들을 구성하고 사용할 수 있게 한다.
- 네임스페이스 관리: 패키지를 가져올 때 초기화 코드를 실행하거나, 패키지 레벨에서 공용 변수를 정의하는 등의 작업을 할 수 있게 한다.
기본 기능
__init__
.py 파일이 있는 디렉토리는 Python에 의해 패키지로 간주된다. 이 파일이 없으면, Python 3.3 이전 버전에서는 해당 디렉토리가 단순한 디렉토리로 인식되어, 모듈로서의 기능을 수행할 수 없다. Python 3.3 이후부터는 Implicit Namespace Packages라는 개념이 도입되어 __init__
.py 파일 없이도 디렉토리를 패키지로 인식할 수 있게 되었지만, 이 파일을 사용하여 패키지 초기화와 관련된 명시적인 작업을 수행하는 것이 여전히 유용하다.
예시
1
2
3
4
5
6
7
8
| my_package/
__init__.py
submodule1.py
submodule2.py
subpackage/
__init__.py
submodule3.py
main.py
|
여기서 my_package와 subpackage는 각각 init.py 파일을 포함하고 있어 Python 패키지로 인식된다.
1
2
3
| print("Initializing my_package")
__all__ = ["submodule1", "submodule2"]
|
이 파일은 my_package를 처음 가져올 때 실행되며, my_package 내의 submodule1과 submodule2만이 기본적으로 가져오기 명령(from my_package import *
)에 의해 가져올 수 있도록 설정한다.
1
2
| def foo():
print("This is foo() from submodule1")
|
1
2
| def bar():
print("This is bar() from submodule2")
|
- my_package/subpackage/
__init__
.py
1
| print("Initializing subpackage")
|
이 파일은 subpackage를 처음 가져올 때 실행된다. 여기에는 추가 초기화 코드나 all 정의 등이 포함될 수 있다.
- my_package/subpackage/submodule3.py
1
2
| def baz():
print("This is baz() from submodule3")
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| # my_package의 모듈들을 불러옵니다.
from my_package import submodule1
from my_package.submodule2 import bar
from my_package.subpackage import submodule3
# submodule1의 foo 함수를 호출합니다.
submodule1.foo()
# submodule2의 bar 함수를 직접 호출합니다.
bar()
# subpackage 내의 submodule3의 baz 함수를 호출합니다.
submodule3.baz()
|