-
[Python] 27. 모듈(module)과 패키지(package)Programming/Python 2021. 7. 26. 16:20
[1] 모듈이란?
# theater_module.py # 영화표 가격 모듈 def price(people) : print(f"{people}명 가격은 {people * 10000}원 입니다.") def price_morning(people) : print(f"{people}명 조조할인 가격은 {people * 6000}원 입니다.") def price_soldier(people) : print(f"{people}명 군인할인 가격은 {people * 4000}원 입니다.")
- 모듈이란, 함수나 클래스 등을 모아 파일로 만들어 놓은 것이라 생각 가능하다.
- 모듈파일은 사용하고자하는 py파일과 같은 폴더 내에 있거나, 모듈이 모아져있는 폴더에 있어야한다.
[2] 모듈의 사용
1) import
# pracetice.py import theater_module theater_module.price(3) theater_module.price_soldier(4)
3명 가격은 30000원 입니다. 4명 군인할인 가격은 16000원 입니다.
- import문을 통해 사전에 정의한 모듈을 사용한다.
- 사용 시, 모듈 파일의 이름을 통해 접근해야한다.
(예 : theater_module.price(3)을 통해, theater_module에 있는 함수 price를 사용한다.)
# pracetice.py import theater_module as mv mv.price(3) mv.price_soldier(4)
3명 가격은 30000원 입니다. 4명 군인할인 가격은 16000원 입니다.
- import를 사용하여 모듈을 사용할 때, 모듈의 별명을 설정할 수 있다.
- 위 코드에선, theater_module에 mv라는 별명을 설정한 것이다.
(예 : theater_module의 별명인 mv를 사용해 mv.price(3)으로 함수를 사용한다.)
2) from import
# pracetice.py from theater_module import * price(3) price_morning(5)
3명 가격은 30000원 입니다. 5명 조조할인 가격은 30000원 입니다.
- 위 처럼, from import를 통해 모듈을 사용할 수도 있다.
- 이 경우, 모듈 이름을 통해 함수에 접근하지 않아도 된다.
# pracetice.py from theater_module import price, price_morning price(3) price_morning(5)
3명 가격은 30000원 입니다. 5명 조조할인 가격은 30000원 입니다.
- from import문을 사용하여, 사용하고자 하는 함수만 불러올 수도 있다.
# pracetice.py from theater_module import price_morning as price price(3)
3명 조조할인 가격은 18000원 입니다.
- from import를 통해 함수를 사용할 때, 해당 함수에 대한 별명을 붙여줄 수 있다.
- 위 코드에선, price(3)을 통해 price_morning(3)을 사용한 것이다.
[3] 패키지란?
- 패키지란, 모듈을 모아놓은 폴더라고 생각할 수 있다.
- 위 사진처럼 travel 폴더에 3개의 py파일을 생성하였다. travel폴더가 패키지이며, 각각의 py파일이 모듈이 될 것이다.
[4] 패키지의 사용
1) thailand.py
class Thailand : def __init__(self, people) : self.people = people def show(self) : print(f"[태국 여행] {self.people}인 {self.people * 50}만원.")
2) vietnam.py
class Vietnam : def __init__(self, people) : self.people = people def show(self) : print(f"[베트남 여행] {self.people}인 {self.people * 40}만원.")
3) practice.py
import travel.thailand import travel.vietnam trip1 = travel.thailand.Thailand(3) trip2 = travel.vietnam.Vietnam(4) trip1.show() trip2.show()
[태국 여행] 3인 150만원. [베트남 여행] 4인 160만원.
- 각 모듈에 클래스 Thailand, Vietnam을 정의한 후, import하였다.
- 주의할 것은, import문에선 함수와 클래스를 바로 갖오는 것이 불가능하다. 하지만, from import는 가능하다
4) from import
from travel.thailand import Thailand from travel import vietnam trip1 = Thailand(3) trip2 = vietnam.Vietnam(4) trip1.show() trip2.show()
[태국 여행] 3인 150만원. [베트남 여행] 4인 160만원.
- 위 처럼 from import를 사용할 수 있다.
- trip1은 travel 패키지 안에 있는 thailand 모듈의 클래스 Thailand를 직접 import하였다. 따라서, trip1 정의 시 클래스명을 바로 사용한다.
- trip2는 travel 패키지 안에 있는 thailand 모듈을 import 하였다. 따라서, trip2 정의 시 모듈명과 클래스명을 통해 접근한다.
5) from travel import *
from travel import * trip = vietnam.Vietnam(3) trip.show()
NameError: name 'vietnam' is not defined
- 위 코드는 에러가 발생한다.
- from travel import *은 travel 패키지 안에 있는 모든 모듈을 가져오겠다는 의미인데, 이처럼 사용하기 위해선 아래와 같은 작업이 필요하다.
# __init__.py __all__ = ["vietnam"]
- travel 패키지 내에 있는 __init__.py에 위와 같은 구문을 입력하면 오류가 발생하지 않는다.
- 위 코드 추가 후, 실행 시 결과가 정상적으로 도출되는 것을 아래에서 확인할 수 있다.
[베트남 여행] 3인 120만원.
*본 글은 코딩 유튜버 '나도코딩'님의 무료강의를 바탕으로 내용을 정리 및 추가한 글입니다.
https://www.youtube.com/watch?v=kWiCuklohdY&t=5934s
'Programming > Python' 카테고리의 다른 글
[Python] 26. 예외 처리 (0) 2021.07.26 [Python] 25. pass와 super, isinstance() (0) 2021.07.25 [Python] 24. 상속 (0) 2021.07.25 [Python] 23. 클래스(class) (0) 2021.07.25 [Python] 22. with (0) 2021.07.20