### Execute function in package ### #./game/__init__.py #./game/sound/__init__.py #./game/sound/echo.py #./game/graphic/__init__.py #./game/graphic/render.py import game.sound.echo game.sound.echo.echo_test() # "echo" from game.sound import echo echo.echo_test() # "echo" from game.sound.echo import echo_test echo_test() # "echo" import game # game.sound.echo.echo_test() : (x) # 'module' object has no attribute 'sound' # when you declare "import game", # You can refer to the module in the directory of game # and something defined by __init__.py # import game.sound.echo.echo_test : (x) # when you declare import.a.b.c, # c must be module or package.!! from game.graphic.relative import render_test2
import game.sound.echo game.sound.echo.echo_test() --> echo 출력 # 2번째 from game.sound.echo import echo_test echo.echo_test #3번째 from game.sound.echo import echo_test echo_test() # 하지만 3번째 방법은 실행 불가하다. # 왜냐하면 import game를 수행하면 디렉터리의 모듈 또는 game 디렉터리의 __init__.py에 정의된것들만 참조할 수 있기 때문이다. # 도트연산자(.)를 사용하여 import할 때는 마지막 항목이 꼭 모듈 또는 패키지 여야만 한다.. __init__ # __init__.py이란 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 해준다. __all__ # __all__이란 패키지에서 import를 할 때에는 *사용이 되지 않기 때문에 __init__.py 파일에
def render_test(): print("render") echo_test()
이번에는 echo.py 파일의 echo_test 함수를 실행해 볼 것이다. 패키지 안의 함수를 실행하는 방법은 총 3가지이다. import의 예제 주의할 점 하나의 예제를 실행하고 다음 예제를 실행할 때에는 반드시 인터프리터를 종료하고 다시 실행해야 한다. (윈도의 경우 인터프리터 종료는 Ctrl+Z). 인터프리터를 다시 시작하지 않을 경우 이전에 import 한 것들이 메모리에 남아 있어 엉뚱한 결과가 나올 수 있다 1. echo 모듈을 import 하여 실행하는 방법 import game.sound.echo game.sound.echo.echo_test() >>> echo 2. echo 모듈이 있는 디렉터리까지를 from ... import하여 실행하는 방법 from game.sound import echo echo.echo_test() >>> echo 3. echo 모듈의 echo_test 함수를 직접 import하여 실행하는 방법 from game.sound.echo import echo_test echo_test() >>> echo * echo_test 함수를 사용 불가한 방법 1 import game game.sound.echo.echo_test() Traceback (most recent call last): File "", line 1, in AttributeError: 'module' object has no attribute 'sound' import game을 수행하면 game 디렉터리의 모듈 또는 game 디렉터리의 __init__.py에 정의한 것만 참조할 수 있다. * echo_test 함수를 사용 불가한 방법 2
from game.sound.echo import echo_test echo_test()
def render_test(): print('render') echo_test()
def rander_test(): print("rander") echo_test()
#패키지는 도트를 사용하여 파이썬 모듈을 계층적으로 관리할 수 있게 해준다. # 모듈 이름이 A.B인 경우 A는 패키지 이름 B는 A 패키지의 B모듈이 된다. import game.sound.echo # 파일 자체를 import game.sound.echo.echo_test() from game.sound import echo #패키지로부터 파일을 import echo.echo_test() from game.sound.echo import echo_test #파일에서 해당 함수만 import echo_test() # 해당 디렉토리 혹은 파일을 import 해야 한다. """ import game은 불가 """
def render_echo_test(): echo_test()
# test 함수 from game.sound.echo import echo_test echo_test() from game.sound import echo as rd rd.echo_test()
# render.py 생성 # def render_test(): # print("render") # 패키지 안의 함수 실행하기 import game.sound.echo game.sound.echo.echo_test() ## Result : echo # game의 sound 폴더에서 echo 함수만 불러와 실행하기 (from 사용) from game.sound import echo echo.echo_test() ## Result : echo from game.sound.echo import echo_test as e # as 를 이용하여 echo_test 함수를 간단히 e 로 줄여서 사용 가능 하다. e() ## Result : echo # __all__ from game.sound import * # * 를 이용하여 모든 함수를 가져 올 수 있으나 오류가 걸린다. # __init__.py 폴더에 __all__ = ['echo'] 과 같이 리스트에 지정하여 주면 # * 실행시 사용할 함수를 지정할 수 있다. echo.echo_test() ## Result : echo