모듈은 변수나 함수 클래스를 모아놓은 파일이다.
파일을 만들고 그 안에 재사용하고 싶은 함수, 클래스, 변수를 구현하면 된다.
## my_module.py(파일명)
my_module_var = 7
def my_module_func():
return "Hello!"
class MyModuleClass:
pass
# import<모듈 이름>
import my_module
import 할때 파일 확장자는 제외하고 파일 이름만 사용해서 import 해야한다.
# <모듈 이름>.<모듈에서 사용하길 원하는 변수/함수/클래스 이름>
my_module.my_module_func()
import를 사용해서 모듈을 불러왔을 경우에는, 모듈 이름을 붙여서 모듈을 사용할 수 있다.
## main.py
import my_module
print(my_module.my_module_var) # 변수 사용을 위해 모듈 이름을 붙여줌
my_module.my_module_func() # 함수 사용을 위해 모듈 이름을 붙여줌
my_module_class = my_module.MyModuleClass()
import
키워드를 사용해서 불러온다. 이를 통해 모듈을 해당 파일과 연결시킨다. from ... import ...
키워드를 이용해서 모듈을 불러 올 수 있다.
from <모듈 이름> import <함수/변수/클래스1>, <함수/변수/클래스2>, ..., <함수/변수/클래스N>
from my_module import my_module_func, my_module_var
print(my_module_var) # 바로 변수 선언해서 사용
my_module_func() # 함수 바로 사용
이렇게 from... import...를 사용하는 경우 모듈을 사용할때 모듈 이름을 붙이지 않고 바로 사용이 가능하다. (위에서 import를 통해 이미 불러주었기 때문에 모듈이름을 붙이지 않고 바로 사용이 가능하다.
1) 여러 모듈울 import 하게 될 경우 이름이 충돌하여 오류가 발생 할 가능성이 있다.
2) 서로 다른 모듈에서 동일한 이름을 가진 함수, 변수가 있을 수 있다.
3) 원하는 모듈의 요소 이름이 너무 긴 경우
이러한 상황들을 위해서 as를 통해 새로운 이름을 부여하여 사용해줄 수 있다.
from my_module import my_func as f1
from my_module2 import my_func as f2
from my_module3 import function_with_name_too_long as f3
f1()
f2()
f3()
my_func을 f1로 이름을 다시 명명해주었다.
또한 아래와 같이 module 이름도 as를 이용해서 새로운 이름을 명명해줄 수 있다.
import my_module as m1
m1.my_module_func()
💡 Package 란?
일반 모듈처럼 import 해서 사용할 수 있다.
import pkg.mod1
from pkg.mod2 import func2
pkg.mod1.func2()
func2()
pkg.mod1.func2() 처럼 . 를 사용해서 해당 package의 원하는 모듈을 import 하면 된다.
package를 import 해줄때 초기 설정을 해주어야 하는 경우들이 있는데, init.py 파일을 통해 package 초기 설정을 가능하게 해준다.
(package 디렉토리안에 파일들이 들어가 있는 모습)
1. import할때 경로의 총 길이 줄여주기
import pkg.mod1
pkg.mod1.func2()
현재 pkg에서 mod1, func2 라는 함수를 import 하여 사용하기 위한 기본 방법으로 func2 함수를 호출할때 마다 모든 경로를 다 타입해주어야하기 때문에 번거롭다. 그런데 만약에 함수 이름은 곧바로 호출 할 수 있으면 편할텐데, 이때 init.py을 통해 함수의 경로를 줄여줄 수 있다.
# __init__.py
from .mod1 import func2
1) init.py파일에 import해줄 함수나 변수를 먼저 적어준다.
# main.py
from pkg import func2
func2()
2) 원하는 파일에 from ... import ... 형식을 통해서 사용 할 수 있다.
2. 변수, 함수, 클래스 제한하기
모듈의 모든 함수를 다 외부로 노출시키지 않고,내부적으로만 사용할 수 있게 막는 것.
all 변수를 통해 정의 된다.
all 변수의 default 값은 모든 함수, 변수, 클래스이기 때문에 all 변수를 따로 정의해주어 import 될 수 있는 요소들을 제한 할 수 있다.
# __init__.py
from .mod1 import func2
from .mod2 import func3
__all__ = ['func2', 'func3']
init 파일에 외부로 노출되지 않도록 하고 싶은 함수 정의
# main.py
from pkg import *
func2()
func3()
func4() ## <== Error. func4 함수는 __all__ 에 정의되지 않았으므로 import 될 수 없음.
all 변수는 string 값을 가지고 있는 list이기 때문에 import 되기 원하는 요소들을 string으로 list에 선언해면 된다.