Point_Sec_0320
파이썬 클래스,모듈,패키지,내/외장함수 본문
파이썬 클래스,모듈,패키지,내/외장함수
* 클래스
- 사실 C언어에는 클래스가 없다. 클래스가 없어도 프로그램은 만들 수 있다.
- 이해하기 편하게 설명을 하자면 , 클래스는 달고나 뽑기의 틀과 같다.
별모양의 틀로 찍으면 별이 나오고 하트모양의 틀로 찍으면 하트가 나온다.
여기서 별과 하트는 인스턴스라고 보면 된다.
- 풀어서 설명하자면 클래스는 '설계도면'을 제시한다.
* 객체와 인스턴스의 차이
- 객체와 인스턴스의 의미에는 차이가 없다. 다만 인스턴스를 " 객체를 관계로 표현한 것 "을 나타낸다. 무슨말인고 하니 클래스 안에서 만들어진 객체를 인스턴스라고 한다.
ex) Cat이라는 클래스에 choco = Cat()를 선언하면, choco는 Cat의 인스턴스라고 부른다.
* 클래스 만들기
- class Sample:
pass
* 클래스를 선언하기
- a = Sample()
* self에 대해 알아보기
- 클래스 안의 함수의 입력인수 첫번째에는 self를 입력
- 의미 : self는 클래스에 의해서 생성된 인스턴스를 지칭한다.
- 클래스를 선언한 변수를 굳이 입력인수에 넣을 필요는 없다. 자동으로 들어가기 때문
* __init__
- 인스턴스를 만들 때 항상 실행이 되어야 하는 함수( 다른 언어에서는 초기화함수라고 많이 지칭한다.)
* 클래스 구조
- 지금까지 봐왔던 변수를 선언하고 함수를 선언하고 연산, 제어문을 이용하고 이 모든 것을 클래스 안에 넣을 수 있다.
- class 클래스 이름[( 상속 클래스명 )] :
* 클래스 메소드 호출방법
- className.method(selfName,입력인수) - 클래스로 메소드를 불러올 때 self인수를 꼭 넣어준다.
- a= className() , a.method(입력인수) - 인스턴스로 메소드를 불러올 때 self인수를 꼭 빼준다.
# 사칙연산 예제
* 클래스 상속
- 상속은 물려받다라는 의미
- 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받도록 기능하는 것
* 메소드 오버라이딩
- 상속받을 대상인 클래스의 메소드와 이름은 같은데 그 행동이 다른경우 사용
- 메소드의 이름은 같도록 만들지만 내용을 재정의한다.
( 오버로딩 = 같은 이름의 메소드를 입력인수를 다르게 하여 여러개 정의 하는것을 의미 )
* 연산자 오버로딩
- 연산자를 객체끼리 사용할 수 있도록 만든 기법
ex) class A:
def __add__(self, other):
print ("")
a= A()
b= A()
a+b # 위의 def __add__가 (+) 표시로 사용
# 박씨네 집 예제
* 모듈
- 함수나 변수 또는 클래스들을 모아놓은 파일
- 모듈을 만들고 불러오기 : 파이썬 파일을 하나 만들고 저장한 다음 > 해당 파일이 있는 디렉토리에서 파이썬을 실행
> import 해당파일이름 그 후에 예제파일을 실행
- import 는 이미 만들어진 파이썬 모듈을 사용할 수 있게 해주는 명령어이다.
- (.)를 이용하여 사용하고 싶은 함수만 쓸수도 있다.
* 모듈함수를 사용하는 다른 방법
- from 모듈이름 import 함수이름1,함수이름2...
* if __name__ == "__main__": 의 의미
- 모듈파일에서 만약 실행문이 있는데 함수를 사용하기 위해 해당 모듈파일을 불러올 경우(import) 실행문이 실행하게 된다.
- 즉 파이썬 파일을 그냥 실행시킬 때와 모듈파일로써 실행시킬 때를 다르게 사용하기 위해 존재하는 제어문이다.
- 직접 이 파일을 사용할 경우 __name__ == "__main__" 이 참이 되어 실행문이 실행되고
- 모듈 파일로써 사용할 경우 __name__=="__main__"이 거짓이 되어 실행문은 실행되지 않는다.
* 모듈을 불러오는 또 다른 방법
- sys.path.append사용
import sys > sys.path 를 입력하면 sys 모듈을 이용해서 파이썬 라이브러리가 설치되어 잇는 디렉터리를 확인할 수 있다.
이 곳에 모듈파일을 모아놓은 디렉터리를 추가 시키면 아무데서나 편리하게 모듈파일을 불러낼 수 있다.
ex) >>>sys.path.append("C:\Python\Mymodules")입력
- PYTHONPATH 환경 변수 사용하기
cmd창을 활용하여 환경변수에 모듈이 담긴 디렉토리를 설정시키는 방법이다.
C:\Users\home> set PYTHONPATH=C:\Python\Mymodules
# 모듈 예제
* 패키지
- 도트(.)를 이용하여 "파이썬 모듈을 계층적으로 관리"할 수 있도로고 하는 것
- A.B라고 하면 A는 패키지, B는 모듈이 된다.
game/
__init__.py
sound/
__init__.py
echo.py
wav.py
graphic/
__init__.py
screen.py
render.py
play/
__init__.py
run.py
test.py
> 이런 구조로 만들어본다.
game 루트디렉토리 안에 __init__.py를 만들고 sound,graphic,play 서브디렉토리를 만들고 안에 __init.py와 나머지 모듈을 만든다.
* __init__.py의 용도
- 해당 디렉토리가 패키지의 일부임을 알려주는 역할
- __init__.py가 없다면 패키지로 인식하지 않는다.
* __all__의 용도
- from 디렉토리 import * >>오류가 뜬다.
- __init__.py에 __all__ = ['해당모듈']을 설정해줘야 한다.
- 이렇게 되면 import *이 해당모듈만 import한다는 의미가 된다.
* relative 패키지
- from game.sound.echo import echo_test 와 from ..sound.echo import echo_test가 같은 표현이다.
- (..)은 현재 디렉토리의 부모 디렉토리를 의미
- (..)과 같은 표현을 relative한 접근자라고 한다. ( 단, 모듈안에서만 가능, 인터프리터에서 접근자를 사용하면 error! )
## 패키지는 예제가 따로 없다.
* 예외 처리
- 오류를 만났을 때 의도적으로 오류를 무시하기 위한 것
- try,except을 이용
* 오류는 언제 만날까?
- 대표적으로 디렉토리안에 파일이 없는데 열려고 할때
0으로 다른 숫자를 나눌 때
리스트에 존재하지 않는 위치값을 얻으려 할 때
* 오류 예외 처리법
>> try:
...
except [발생오류 [as 오류 메시지 변수]]:
...
* except구문
- try,except만 쓰는 방법 > 오류 종류에 상관없이 except 블록을 수행
- 발생 오류만 포함한 except문 > 미리 정해 놓은 오류이름과 일치할 때 수행
- 발생오류와 오류메시지 변수까지 포함한 except문 > 위의 경우에서 오류메시지의 내용까지 알고 싶을 때
* try ..else
- except블로 뒤에 else: 블록을 붙여서 try시도 후에 오류가 발생하지 않으면 else블록으로 넘어간다.
* try ..finally
- finally같은 경우는 try블록이 실행도중 무슨 예외가 발생하던 상관없이 finally블록이 실행된다.
* 오류 회피시키기
- except블록 내용을 pass만 넣기
* 오류 일부로 발생시키기
- raise를 사용
- 상속 클래스에서 자식 클래스가 자신의 함수를 반드시 오버라이딩 시키고 싶을 때 raise문을 사용하여 오버라이딩을
하지 않으면 오류가 뜨도록 만든다.( 예제에서 확인하기 )
# 예외처리 예제
* 내장 함수
- 이미 만들어진 함수를 다시 정의하는 바보같은 짓은 할 필요가 없다.
- 파이썬 라이브러리를 둘러보는 것도 중요
* abs
- 숫자의 절대값을 리턴
* all
- 반복가능한 자료형을 입력받아 모두참인지 거짓인지 리턴
* any
- 반복가능한 자료형을 입력하다 하나라도 참이면 True, 모두 거짓일 때만 False로 리턴1
* chr
- 아스키코드 입력받아 해당 문자를 출력
* dir
- 객체가 자체적으로 가지고 있는 변수나 함수
* divmod
- a를 b로 눈 몫과 나머지를 튜플로 리턴
* enumerate
- 열거하다는 의미로, 자료형을 입력받아 인덱스값을 포함하는 객체를 리턴
* eval
- 실행 가능한 문자열을 입력 받아 문자열을 실행한 결과값을 리턴 ( 입력받은 문자열로 함수나 클래스를 동적으로 실행)
* filter
- 걸러낸다는 의미, 필터요소를 첫번째 인수(함수)로 두번째는 리스트의 요소로 들어간다.
* hex
- 정수를 입력 , 16진수로 변환
* id
- 객체를 입력받아 객체의 고유 주소값을 리턴
* isinstance
- 첫번째 인수는 인스턴스, 두번째 인수는 클래스 이름을 입력 , 해당 객체가 클래스의 인스턴스가 맞는지 리턴
* lambda
- def와 같은 역할(예약어) , 보통 함수를 간결하게 한줄로 만들 때 사용
ex) sum = lambda a,b: a+b
lambda 인수1,인수2,,,, : 인수를 이용한 표현식
* map
- 함수와 반복가능한 자료형을 입력받아 그 자료형이 입력한 함수로 실행된 결과를 묶어서 리턴하는 함수
* oct
- 정수를 입력받아 8진수 문자열로 리턴
* ord
- 문자의 아스키코드값을 리턴
* pow
- 첫번째 인수의 두번째 인수제곱한 결과 리턴
* sorted
- 입력값을 정렬하여 리스트로 리턴 ( 자료형의 sort함수는 리턴하지 않는다. )
* type
- 입력값의 자료형이 무엇인지 알려준다.
* zip
- 동일한 개수로 이러우진 자료형을 묶어주는 역할을 하는 함수
# 내장함수 예제
* 외장함수
- 전세계의 많은 파이썬 사용자들이 모아놓은 것이 파이썬 라이브러리다. 모든 라이브러리를 다 알 필요는 없고 어떤 라이브러리를 사용하면 되는지 정도만 알면 된다.
* sys
- 파이썬 인터프리터가 제공하는 변수들과 함수들을 직접 제어가능한 모듈
- import sys
- sys.argv : 도스 창에서 모듈파일 뒤에 또 다른 값을 전달하는 기능 :
- sys.exit : 강제로 스크립트 종료시키기
- sys.path : 자신이 만든 모듈 불러 사용하기
* pickle
- 객체의 형태를 유지 동시에 파일에 저장하거나 불러올 수 있도록 하는 모듈
- import pickle
- pickle.dump( 데이터를 담은 변수, 파일이름) : data를 그대로 파일에 저장시키기
- pickle.load(파일이름) : 파일에 있는 객체상태 그대로 불러온다.
*OS모듈
- 환경변수나 디렉터리, 파일등 OS자원을 제어
- import os
- os.environ : 현재시스템의 환경 변수값을 보여준다.
- os.chdir : 현재 디렉터리의 위치를 변경
- os.getcwd : 자신의 현재 디렉터리 위치를 리턴
- os.system : 시스템 자체의 프로그램이나 기타 명령어들을 파이썬에서 호출
- os.popen : 시스템 명령어를 실행시킨 결과값을 읽기 모드 형태의 파일객체로 리턴
* shutil
- 파일을 복사해주는 파이썬 모듈
- import shutil
- shutil.copy(src,dst) : src라는 파일을 dst로 복사, 만약 dst라는 파일이 존재했으면 덮어쓰기
* glob
- 특정 디렉터리에 있는 파일 이름을 모두 알아야 할 때 사용
- import glob
- glob.glob("C:\Python\q*") : 파이썬 디렉터리안에 q로 시작하는 모든 파일을 읽어들여라
* tempfile
- 파일을 임시로 만들어서 사용할 때 유용
- import tempfile
- tempfile.mktemp() : 중복되지 않는 임시 파일의 이름을 무작위로 만든다.
- tempfile.TemporaryFile() : 임시 저장 공간을 사용될 파일객체를 리턴( 기본적으로 바이너리 쓰기모드(wb))
파일.close()가 호출되면 객체는 사라짐
* time
- import time
- time.time :1970/1/1을 기준으로 지난시간을 초 단위로 리턴
- time.ctime : 현재 날짜, 시간을 리턴
- time.sleep : 주로 루프 안에서 많이 사용된다. 일정 시간간격을 두고 루프를 실행 !!!!!알아둘 것!!!!!
* random
- 난수를 발생시키는 모듈
- import random
- random.random() : 0.0~1.0사이의 수에서 실수 중에서 난수를 발생
- random.ranint(시작숫자,끝숫자) : 시작숫자부터 끝숫자까지 범위에서 정수형 난수를 발생
- random.choice(리스트) : 리스트에서 데이터를 랜덤하게 1개를 선택
- random.shuffle(리스트) : 리스트의 항목을 무작위로 섞고 싶을 때 사용
* webbrowser
- 기본 웹 브라우저가 자동으로 실행하도록 도와주는 모듈
- ex) import webbrowser
webbrowser.open("http://google.com")
> 웹 브라우저가 실행된 상태면 해당주소로 이동, 실행중이지 않다면 새 웹브라우저를 실행
* threading (*)
- 프로세스 <- 컴퓨터에서 동작하고 있는 프로그램 , 1프로세스는 1가지 일만 실행.
- 스레드를 이용하면 1프로세스에서 동시에 여러가지 일을 동시에 실행
>> 다만 실제로 동시에 벌어지는 일은 아니다. 연산이 매우 빠르기 때문에 컴퓨터가 스케쥴링을 조절하여 동시에 일을 처리하는 것처럼 보이는 것
- 예제로 코드를 확인
# 외장함수 + 스레드 예제
##
이번 파트가 사실 파이썬의 가장 핵심적인 파트라고 보면 된다. 보면 막상 어렵진 않지만 모듈이나 패키지가 생소할 수 있다. 다만 내용을 정확히 알고는 있되 아직 생소한 느낌은 당연하다. 다음 게시글이 파이썬의 마지막 파트가 될 것이다. 간단한 예제들을 다뤄보고, xml, 정규표현식을 다뤄볼 예정이다.
##
다른 고수님들의 피드백은 필자에게 매~우 감사한 일입니다. 댓글로 피드백, 질문 모두 받겠습니다. 감사합니다.
'python' 카테고리의 다른 글
파이썬 마지막 간단한 예제, 정규표현식, xml (0) | 2017.12.12 |
---|---|
파이썬_ 제어문,함수,입출력 (0) | 2017.04.04 |
리스트,튜플,딕셔너리,집합,참거짓,변수 (0) | 2017.04.03 |
파이썬이란 무엇인가?, 파이썬의 기초,자료형 (0) | 2017.04.03 |