<파이썬 코드를 저장하는 단위>모듈과 페키지
(모듈) : 독차적인 기능을 갖는 구성요소를 의미, 파이썬에서는 각각의 소스 파일을 일컫음.
- 표준 모듈 : 파이썬과 함께 따라오는 모듈
- 사용자 생성 모듈 : 프로그래머가 직접 작성한 모듈
- 서드 파티 모듈 : 다른 프로그래머, 또는 업체에서 제공한 모듈
이렇게 3가지 종류가 있음.
- 장점 :
코드의 '재사용성'
- import
역할 : '다른 모듈 내의 코드에 대한 접근'을 가능하게 하는 것. import가 접근 가능하게 하는 코드에는 변수, 함수, 클래스 등이 모두 포함됨.
사용방법:
1. import 모듈 #모듈의 실제 파일 명은 "모듈.py"
2. from 모듈 import 변수 또는 함수
- 모듈을 찾아서
import문을 만나면 파이썬은 다음과 같은 순서로 모듈 파일을 찾아나감.
1. 파이썬 인터프리터 내장 모듈
2. sys.path에 정의되어 있는 디렉토리
- 메인 모듈과 하위 모듈
파이썬에서는 이른바 '최상위 수준'에서 실행되는 스크립트가 있을 뿐, 메인 함수는 따로 없음 <- C/C+ 스타일의 언어(C#과 JAVA)와의 차이점
파이썬에서는 '어떻게 만드느냐?'가 아닌 '어떻게 실행하느냐'에 따라 메인 모듈이 결정됨.
파이썬에서는 내장 전역 변수인 __name__이 있는데, 이 변수는 모듈이 최삿ㅇ이 수준으로 실행 될 떄, '__main__'으로 지정됨.(최상위 수준으로 실행되는 모듈은 __name__변수가 '__main__'으로 지정됨)
최상위 수준으로 실행되는 모듈을 메인 모듈이라고 한다면, 이 메인 모듈이 import문을 이용하여 불러오는 모듈은 하위 모듈이라고 함.
하위 모듈의 __name__변수는 메인 모듈에서와 달리 모듈 명 자체를 담고 있음.
한가지, 생각 해야 할 점은, 'import 모듈' 코드가 모듈의 내용을 실행한다는 것에 유의. -> 이 하위 모듈의 코드를 최상위 수준일 떄만 실행되로록 하려면
어떻게 해야 할까??
Hint는 __name__변수에 있음.
(패키지) : 모듈을 모아놓는 디렉토리
- 평범한 디렉토리가 '파이썬의 패키지'로 인정받으려면 __init__.py 파일을 그 경로에 갖고 있어야 함.
즉, 패키지는 '__init__.py'파일을 갖고 있는 디렉토리임.
- __init__.py
이 파일은 대개 비워두는 것이 보통임.
이 파일을 손대는 경우는 __all__이라는 변수를 조정할 때 정도.(__all__은 'from 패키지 import *'와 같은 코드를 실행할 때, 패키지로부터 반입할 모듈의 목록을 정의하기 위해 사용함)
- site-packages
파이썬이 기본적으로 모듈을 탐색하는 경로에 포함되어 있음.
파이썬의 기본 라이브러리 패키지 외에 추가적인 패키지를 설치하는 디렉토리.
주로 서드 파티 모듈이 이곳에 설치됨.
site_packages 디렉토리에 여러 가지 소프트웨어가 사용할 공통 모듈을 넣어두면 물리적인 경로에 구애받지 않고 모듈에 접근하여 반영할 수 있음.
(객체 지향 프로그래밍 - 클래스)
- 사용 :
class 클래스이름 : <- 클래스의 이름은 대문자로 시작하는 것이 보통.
코드블록 <- 클래스의 코드블록은 변수와 메소드(클래스에 속해있는 함수, 함수와 거의 동일한 의미이지만 메소드는 클래스의 멤버임)로 이루어짐.
# __init__() 메소드를 이용한 초기화
클래스 생성자가 호출되면 내부적으로 또 다른 두개의 메소드가 호출 됨.
하나는 __new__()이고 또 다른 하나는 __init__()임. 이들은 마법 메소드 또는 특별 메소드라 불리우는데, 밑줄 두개(__)로 싸여 있는 이름을 가지는 것이 특징임.
cf) 생성자 호출 -> __new__() 메소드가 호출됨(이 메소드의 임무는 클래스의 인스턴스를 만드는 것 = 생성 작업) -> __init__() 메소드가 초기화 작업은 진행
__init()__ 메소드의 이름은 '초기화하다'는 뜼의 initialize를 줄여서 붙여진 것. 이 메소드는 생성자로부터 전달된 매개변수를 받아 객체의 상태를 초기화할 수 있음.
# self
파이썬에서는 '메소드가 소속되어 있는 객체' 자신을 의미
- 정적 메소드와 클래스 메소드
정적 메소드 : @staticmethod 데코레이터로 수식하며, self 매개변수 없이 정의함.
class 클래스 이름:
@staticmethod <- @staticmethod데코레이터로 수식
def 메소드이름( 매개변수 ): <- self 매개변수는 사용하지 않음
pass
클래스 메소드: @classmethod 데코레이터와 cls 매개변수가 필요.
class 클래스 이름:
#....
@classmethod <- 클래스 메소드를 정의하기 위해서는 1. @classmethod 데코레이터를 앞에 붙임
def 메소드이름(cls): <- 메소드의 매개변수를 하나 이상 정의.
pass
인스턴스 메소드에 self가 필수 매개변수 였다면 클래스 메소드는 매개변수 cls가 필수적임.
- 클래스 내부에게만 열려있는 프라이빗 멤버
프라이빗 멤버의 명명 규칙
1. 두개의 밑줄 __ 이 접두샤여야 함.(예: __number__)
2. 접미사는 밑줄이 한 개까지만 허용됨.(예:__number_)
접미사의 밑줄이 두개 이상이면 퍼블릭 멤버로 간주됨.(예: __number__)
- 상속
형식 :
class 기반 클래스 = 부모:
# 멤버 정의
class 파생 클래스 = 자식(기반 클래스 = 부모)
# 아무 멤버를 지정하지 않아도 기반 클래스의 모든 것을 물려 받아 갖게 됨.
# 단, 프라이빗 멤버(__로 시작되는 이름을 갖는 멤버)는 제외.
- super()
부모 클래스의 객체 역할을 하는 프록시(Proxy)를 반환하는 내장 함수.
장점 : 기반 클래스가 다른 클래스로 교체되거나 수정되어도 파생 클래스가 받는 영향을 최고화 할 수 있음.
- 다중 상속 : 자식 하나가 여러 부모(?!)로부터 상속을 받는 것
파이썬에서는 파생 클래스를 정의할 떄, 기반 클래스(=부모)의 이름을 콤마(,)로 구분해서 쭉 적어주면 다중 상속이 이루어짐.
- 오버라이딩(Overriding) : 영어로 '짓밞다','(결정 등을)무효로 하다', '~에 우선하다'등의 뜻을 가짐.
기반(부모) 클래스부터 상속받은 메소드를 다시 정의하다
※상속 클래스를 정의할 때, 메소드에 관한 옵션은 3가지 이다.
1. 메소드를 부모로부터 그대로 물려받기(상속)
2. 부모 버전의 메소드를 무시하고 재정의(오버라이딩)
3. 부모 버전의 메소드를 재정의 하면서, 부모의 메소드를 활용 -> super()와 연관. = super()를 통해 부모 클래스 버전의 메소드를 호출.
- 데코레이터(장식) : 함수를 꾸미는 객체
데코레이터는 __call___() 메소드를 구현하는 클래스이다. <- __call__() 메소드는 객체를 함수 '호출' 방식으로 사용하게 만드는 마법 메소드
사용하는 방법
1. 생성자
2. @ 기호 : 바람직한 방법
- for문으로 순회를 할 수 있는 객체 만들기
Q.리스트 처럼 순회 가능(Iterable)한 객체는 어떻게 만들까?
1. 이터레이터와 순회 가능한 객체
파이썬에서 for문 실행 시 가장 먼저 하는 일은 순회하려는 객체의 __iter__() 메소드를 호출하는 것.
__iter__() 메소드는 이터레이터라고 하는 특별한 객체를 for문에게 반환함.
이터레이터는 __next__() 메소드를 구현하는 객체를 말하는데, for문을 매 반복을 수행할 때마다, 바로 이 __next__() 메소드를 호출하여 다음 요소를 얻어냄.
2.제너레이터
제너레이터는 이터레이터처럼 동작하는 함수이지만, 이터레이터보다 훨씬 더 간편하게 구현할 수 있음.(클래스를 정의하지 않아도 되고, __iter__()메소드나 __next__() 메소드를 구현할 필요 없음)
= 함수 안에 yield문을 이용하여 값을 반환하면 됨.
cf) yield문은 독특하다 = return 문처럼 함수를 실행하다가 값을 반환하지만, return 문과는 다르게 함수를 종료시키지 않고 중단 시켜 놓기만 함.
- 상속의 조건 : 추상 기반 클래스
추상 기반 클래스는 자식 클래스가 갖춰야 할 특징(메소드)을 강제하는 기능을 함. -> 추상 기반 클래스가 요구하는 메소드를 자식 클래스가 구현하지 않는다면, 자식 클래스의 인스턴스를 생성하고자 할 때,
파이썬은 TypeError 예외를 일으킴.
추상 기반 크랠스를 정의할 때는 metaclass에 별도의 메타 클래스를 지정하지 않으면 Type 클래스가 기본적으로 사용됨.
'스마트웹앱콘텐츠전문가 > 파이썬(플라스크, 데이터 처리)' 카테고리의 다른 글
[파일처리] (0) | 2018.01.23 |
---|---|
[예외처리] (0) | 2018.01.23 |
[흐름제어]분기문,반복문,제어문... (0) | 2018.01.22 |
[함수] (0) | 2018.01.22 |
[데이터 다루기]리스트, 튜플, 딕셔너리 (0) | 2018.01.19 |