Example #1
0
### 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()
Example #4
0
이번에는 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 
Example #5
0
from game.sound.echo import echo_test

echo_test()

Example #6
0
def render_test():
    print('render')
    echo_test()
Example #7
0
def rander_test():
    print("rander")
    echo_test()
Example #8
0
#패키지는 도트를 사용하여 파이썬 모듈을 계층적으로 관리할 수 있게 해준다.
# 모듈 이름이 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은 불가
"""
Example #9
0
def render_echo_test():
    echo_test()
Example #10
0
# test 함수

from game.sound.echo import echo_test
echo_test()

from game.sound import echo as rd
rd.echo_test()
Example #11
0
def render_test():
	print("render")
	echo_test()
Example #12
0
# 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