[Python]__init__.py

Jimin_Note·2022년 5월 26일
0

[Python]

목록 보기
19/34

📍__init__.py 의 용도

__init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할
패키지에 포함된 디렉터리에 __init__.py 파일이 없다면 패키지로 인식되지 않는다.

※ python3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식하지만 하위 버전 호환을 위해 __init__.py 파일을 생성하는 것이 안전한 방법

from game.sound import *
echo.echo_test()

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'echo' is not defined

game.sound 패키지에서 모든 것(*)을 import하였으니 echo 모듈을 사용할 수 있어야 할 것 같은데 echo라는 이름이 정의되지 않았다는 NameError가 발생

->특정 디렉터리의 모듈을 *를 사용하여 import할 때에는 해당 디렉터리의 __init__.py 파일에 __all__ 변수를 설정하고 import할 수 있는 모듈을 정의해 주어야 한다.

# C:/doit/game/sound/__init__.py
__all__ = ['echo']

여기에서 __all__이 의미하는 것은 sound 디렉터리에서 * 기호를 사용하여 import할 경우 이곳에 정의된 echo 모듈만 import된다는 의미

from game.sound.echo import * __all__과 상관없이 무조건 import된다. 이렇게__all__과 상관없이 무조건 import되는 경우는 from a.b.c import * 에서 from의 마지막 항목인 c가 모듈인 경우이다.

위와 같이 __init__.py 파일을 변경한 후 위 예제를 수행하면 원하던 결과가 출력되는 것을 확인할 수 있다.

from game.sound import *
echo.echo_test() #echo
profile
Hello. I'm jimin:)

0개의 댓글