반응형

Module 이란 ?

함수나 변수 또는 클래스를 모아 놓은 파일

모듈은 이미 만들어져있는 것을 사용할 수도 있고 사용자가 직접 만들어서도 사용이 가능합니다.

 

파이썬에서 기본적으로 제공하는 함수들을 다 작성 할 순 없어서 아래 링크를 참조하면 확인 가능합니다.

 

https://docs.python.org/ko/3.7/library/index.html

 

파이썬 표준 라이브러리 — Python 3.7.7 문서

파이썬 표준 라이브러리 파이썬 언어 레퍼런스 는 파이썬 언어의 정확한 문법과 의미를 설명하고 있지만, 이 라이브러리 레퍼런스 설명서는 파이썬과 함께 배포되는 표준 라이브러리를 설명합�

docs.python.org

 

Module의 사용 목적 ?

코드의 재사용을 가능하게 하며, 하나의 이름 공간으로 별도 관리가 가능하다.

 

Module의 사용 위치

 package 내에서 작성해야 한다.

 

Module import 방법

 

방법 1)

import 불러올모듈A

불러올모듈A 전체를 가져온다.

이 방식을 이용하는 경우 '불러올모듈A.메소드' 처럼 모듈명을 적고 사용하여야한다.

 

방법 2)

from 불러올모듈B import 메소드 or 변수

불러올모듈B 내에 있는 특정 메소드 또는 모듈에 정의된 변수를 가져온다.

방법 1과 다르게 불러온 메소드 또는 변수 앞에 모듈명을 적지 않고 사용 가능하다.

 

 

 

 

Ex 1)

# import math

# math의 모듈 함수 : fabs(절대값), ceil(올림), floor(버림), exp(지수함수), log(로그), sqrt(루트), sin(사인함수),

# asin(사인 역함수), cos(코사인), acos(코사인역함수), tan(탄젠트), degrees(라디안을 각도로), radians(각도를 라디안)

# math의 모듈 상수 : pi, e

 

import math
print(math.ceil(1.2), math.ceil(1.6)) # 정수 근사치 중 큰 수
print(math.floor(1.2), math.floor(1.6)) # 정수 근사치 중 작은 수
print()

 

출력 결과

 

 

이번에는 사용자 모듈을 생성하고 불러와서 사용해보겠습니다.

 

mymod1.py

gvar = 123
def ListHap(*ar):
    print(ar)
    
def kbs():
    print('채널9')
    
def mbc():
    print('문화방송')

mymod2.py

def Hap(a, b):
    return a + b

def Cha(a, b):
    return a - b


 

불러오기 위한 사용자 모듈 2개를 생성하였습니다. 이번에는 불러올 최상위 모듈에서 호출해보겠습니다.

방법 1.

import pack1.mymod1
list1 = [1,2]
list2 = [3,4,5]
pack1.mymod1.ListHap(list1, list2)

pack1.mymod1.kbs()

 

출력 결과

 

방법 2.

from pack1 import mymod1
mymod1.kbs()

 

방법 3.

from pack1.mymod1 import kbs, mbc, gvar
kbs()
mbc()
print(gvar)

 

방법 4.

from etc.mymod2 import *
print(Hap(5, 3))
print(Cha(5, 3))

해당 방법은 etc 패키지 안에 있는 mymod.py 에 있는 것들을 전부 import 하겠다는 의미입니다.

 

 

if __name__ == '__main__': 

 

불러올 모듈에서 함수뿐 아니라 내용까지 전부 실행할 경우 __name__ 변수에 __main__이 저장되어 전부 실행된다.

하지만 다른 모듈에서 불러와서 사용할 경우 __name__ 변수에 불러올 모듈명 저장된다.

 

main.py

# 여러 모듈 중 응용프로그램의 시작 모듈을 명시적으로 표시하기
# 이곳은 모듈을 불러온 파이썬 모듈
if __name__ == '__main__':
    print('여기가 최상위 모듈')
    
pack1.mymod1.kbs()

from pack1 import mymod1
mymod1.kbs()

mymod1.py

gvar = 123
def ListHap(*ar):
    print(ar)
    # 최상위 모듈이 아니라 출력되지 않음
    if __name__ == '__main__':
        print('최상위메인모듈')
    
def kbs():
    print('채널9')
    
def mbc():
    print('문화방송')

mymod1.py의 파일에 if __name__ == '__main__' 부분을 추가하였습니다.

 

여기서 위 mymod1.py 에서 직접 실행하면 __name__ 이 참이 되면서 mymod1.py 에서의 print 문이 출력됩니다.

 

하지만 main.py 에서  부를 경우 mymod1.py 의 if문이 거짓이 되면서 print문이 출력되지 않습니다.

 

해당 이유는 위에 작성하였습니다.

 

 

 

 

클래스를 포함한 모듈 

 

class TestClass:
    kk = 1 # 멤버변수 ( 전역 )
    
    def __init__(self):
        print('생성자')
        
    def __del__(self):
        print('소멸자')
        
    def printMsg(self): # 메소드 (public)
        name = '한국인' # 지역변수
        print(name)
        print(self.kk)
        
test = TestClass() # 생성자 호출. instance
print(test.kk) # 1을 출력
print(TestClass.kk) # prototype(원형) 클래스의 멤버 직접 호출
 
print()

test.printMsg() # Bound Method call
# TestClass.printMsg() # 이렇게 주면 아규먼트를 주지 않아서 ERR
print()
TestClass.printMsg(test) # UnBound Method call

 

__init__과 self에 대해서는 다음에 추가 설명 작성 또는 포스팅을 하도록 하겠습니다.

 

위에 작성한 클래스들을 호출한 출력 결과

 

반응형

'python' 카테고리의 다른 글

python - 가변인수  (0) 2020.05.08
python - range  (0) 2020.05.08
python - 함수  (0) 2020.05.07
python - 반복문 (for)  (0) 2020.05.07
python - 반복문 (while)  (0) 2020.05.07

+ Recent posts