모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일
영화 가격 출력 모듈
module.py
# 영화 가격 설정
def price(people):
print("{0}명 가격은 {1}원 입니다".format(people, people * 10000))
# 조조할인 가격
def price_morning(people):
print("{0}명 가격은 {1}원 입니다".format(people, people * 6000))
# 군인 할인 가격
def price_soldier(people):
print("{0}명 군인 가격은 {1}원 입니다".format(people, people * 4000))
# 방법 1 : 모듈 통채로 불러오기
import module
module.price(3)
module.price_morning(4)
# 방법 2
import module as mv # module에 mv이라는 별명을 붙여서 사용
mv.price(3)
mv.price_morning(4)
# 방법 3
from module import * # 모두 호출
price(3)
price_morning(4)
# 방법 4
from module import price, price_morning # 필요한것만 호출
price(5)
price_morning(4)
# 방법 5
from module import price_soldier as price # 필요한걸 호출하고 별명을 준다
price(5) #군인 가격
패키지(Packages)는 도트(.)를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해준다. (패키지안에 모듈이 모아져있다고 생각하면 된다.)
패키지 파일 생성(package) 후 안에 일본, 타이완 여행 비용 모듈을 넣어둔다.
일본 여행 모듈 (japan.py)
class JapanPackage:
def detail(self):
print("[일본 패키지 3박 5일] 도쿄, 오사카 여행 (카지노 투어) 40만원")
타이완 여행 모듈 (thiland.py)
class ThailandPackage:
def detail(self):
print("[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원")
#방법 1
import package.thailand #패키지
trip_to= package.thailand.ThailandPackage()
trip_to.detail()
#방법 2
import package.thailand.ThailandPackage #모듈을 직접 디렉터까지 직접 import
trip_to= package.thailand.ThailandPackage()
trip_to.detail()
# 방법 3
from package.thailand import ThailandPackage #패키지안에 함수를 직접 import하는 방식
trip_to = ThailandPackage()
trip_to.detail()
__init__.py
파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다. 만약 thailand, japan 등 패키지에 포함된 디렉터리에__init__.py
파일이 없다면 패키지로 인식되지 않는다.
원래 random 함수 처럼 모두 불러올때
from random import *
로 모두 불러왔지만
내가 만든 패키지에 위 명령어 처럼 하면 밑에 코드 처럼 에러가 발생한다.
from package import * #패키지
trip_to= thailand.ThailandPackage()
trip_to.detail()
NameError: name 'thailand' is not defined
이렇게 특정 디렉터리의 모듈을 *를 사용하여 import할 때에는 다음과 같이 해당 디렉터리의
__init__.py
파일에__all__
변수를 설정하고 import할 수 있는 모듈을 정의해 주어야 한다.
init 파일에 밑에 코드 추가
__all__ = ["thailand"]
잘 작동하는걸 확인 할수 있다
from package import * #패키지
trip_to= thailand.ThailandPackage()
trip_to.detail()
[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원
여기서 일본도 추가 하고 싶으면 all배열에 추가면 된다.
__all__ = ["thailand", "japan"]
__name__
이용
타이완 파일에 if문을 추가하여 확인가능하다
class ThailandPackage:
def detail(self):
print("[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원")
if __name__ == "__main__":
print("모듈을 직접 실행")
trip_to = ThailandPackage()
trip_to.detail()
else:
print("외부에서 모듈을 직접 호출")
테스트로 random 패키지 위치 찾기
import inspect
import random
from package import *
print(inspect.getfile(random))
print(inspect.getfile(japan))
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/random.py
외부에서 모듈을 직접 호출 # 위에 설정한 메세지 출력
/Users/admin/git/python-study/package/japan.py