추상(abstract) : 내용이 없는 이름만 존재하는
고객의 요구사항 ? 구현?
| 메뉴판
고객의 요구사항 <--> 모형 <--> 구현
=> 인터페이스라고도 얘기하고 , Protocol(규칙 , 규약)
ex) 식당에 갔는데 , 메뉴판에 메뉴가 없다? 메뉴는 약속이다.
개발자가 되기 위해서는 습관화가 되어야 한다.
중견 기업이나 면접을 보러갈땐 오버라이딩 , 추상 등을 익혀야 함
=> abstract class & abstract method
abstract class 는 인스턴스를 만들 수 없는 클래스 - 상속을 통해서만 사용 합니다.
- abstract method는 내용이 없는 메소드 - 하위 클래스에서 반드시 내용을 구현해야 하는 메소드 , 반드시 구현해야 한다고 해서 protocol 이라고 하기도 하고 , interface 라고 부르기도 합니다.
고객의 프로그램을 만들 때 abstract class 를 이용해서 템플릿을 만들고 실제 구현이 abstract class 를 상속받은 클래스에서 하게 됩니다.
이러한 패턴을 템플릿 메소드 패턴이라고 합니다.
추상클래스를 만들 때는 class 클래스이름(metaclass=abcmeta): 이렇게 해줘야 하고 추상 메소드를 만들 때는 상단에 @abstractmethod
라고 추가하면 됩니다
abc 모듈의 abstractmethod 와 ABCMeta 를 import 해야 합니다.
from abc import abcstractmethod
from abc import ABCMeta
class Menu(metaclass=ABCMeta):
@abstractmethod
def softtofu(self):
pass
#추상 클래스를 상속받은 클래스
class KoreaFoodHous(Menu):
def softtofu(self):
print("두부를 이용한 찌개")
obj = KoreadFoodHouse()
obj.softtofu()
=> Delegation (위임)
화면에 보여지는 객체 (뷰)에 발생하는 이벤트를 자신이 처리하지 않고 다른객체에게 넘겨서 처리하는 것
파이썬에서는 인스턴스가 소유하고 있지 않은 메소드를 호출할 때 대신호출되는 메소드를 Delegation 이라고 합니다.
def __getatter__(self, name) 의 형태로 만들어야 합니다.
name은 메소드 이름입니다.
* 클래스 만드는 것보다 클래스를 사용하는 것이 중요
class Delegation:
def display(self):
print("화면출력")
delegation=Delegation()
delegation.display()
delegation.print() <-- x틀린 것 임 에러 의 예시
# attributeError : 인스턴스가 가지지 않은 속성이나 메소드를 호출 한 것 # TypeError : 2가지 경우다. 메소드를 호출 할 때 필요한 데이터를 안 준것은 아닌지 확인하고 # 잘못된 데이터를 입력하는 경우이다. 숫자를 대입하는데 문자를 대입한 경우 # 문자를 대입해야하는데 숫자를 대입한 경우 help를 이용해서 확인 해야 합니다 |
# 이 메소드를 만들면 메소드를 호출해도 에러가 나지 않고
# 대신 이메소드가 호출됩니다
def __getattribute__(self, name):
print(name,'은 없는 메소드 입니다.')
(나야 물론 흩겨들은 자료구조의 지식이 있는데 , 기본적으로 처음 코딩 독학하는 분들이 계신다면 '자료구조'를 보시면 좋습니다.
처음에 저도 0 과 1 왜 첫번째가 0번째 자리지 막 헷갈리고 욕도나왔는데 봐줘야합니다 ㅜ.ㅠ)
li= [100,200,300] li : 2000번지
100 |
200 |
300 |
li[0]=100
li[1]=200
li[2]=300
li[3] = 300 (X) // 0번지 부터
iterator(반복자)
-> for를 이용해서 데이터의 모임을 빠르게 접근할 수 있도록 해주는 것
***
for 임시변수 in 데이터의 모임:
데이터의 모임을 순회하면서 수행할 작업
***
데이터의 모임의 데이터들이 순서대로 임시변수에 대입되서 작업을 수행한다.
__iter__ 가 구현된 인스턴스만 사용할 수 있습니다.
lli = ['python','r','c','c++']
for i in li:
print(i)
결과 : python
r
c
c++
print(dir(li)) li가 가진 모든 요소를 확인 해주는 명령어
__iter__ 가 있는 것을 확인할 수 있다.
이 친구가 있어서 저렇게 출력이 가능하다.
msg = 'python'
for i in msg:
print(i)
idx = 100
for i in idx:
print(i)
출력결과 : 오류가 뜬다
why? idx에는 __iter__가 존재하지 않고 위 구문인 msg에는 존재한다.
dir(msg)로 확인해보면 된다.
#__add__: + #__sub__: - #__mul__: * #__eq__: * #__ne__:!= #__gt__:> #__gte__:> #__it__:< #__ite__:<= |
=> geterator
iterator 의 특수한 형태로 함수를 만들고 yield 데이터를 작성하면 for 를 이용하면 yield 뒤에 있는 데이터가 순서대로 리턴됩니다.
=> coroutine
응용 프로그램 만드는 작업 그 중에서도 빅데이터 처리쪽을 하는 경우에 살펴보시면 됩니다
함수 수행 중에 다른 함수로 제어권을 이동했다가 다시 돌아올 수 있도록 만드는 것
=> decorator
@명령어 를 이용해서 특별한 기능을 사용하는 것
우리가 작성할 때는 @명령어로 입력하지만 실행이 될 때 실제 코드를 가져와서 실행합니다.
웹프로그래밍할 때 많이 사용됩니다.
***** 모듈 과 패키지
1. Module
-> 독립적인 실행 가능한 코드의 모임 (프로그래머의 입장)
-> 파이썬에서는 하나의 파일이 모듈
-> 3rd party 모듈 : 파이썬 재단이나 사용자가 아닌 다른 사람들이 만들어서 제공하는 모듈
-> 파이썬에서는 현재 실행 중인 파일을 main 모듈이라고 합니다.
2) 다른 모듈을 사용하는 방법
math 라는 모듈이 있고 그 안에 PI 와 cos() 라는 함수가 존재하는 경우
=> import 모듈이름 : 모듈에 작성된 모든 것을 모듈이름으로 가져온것입니다.
import math : math.PI , math.cos() 형태로 사용합니다.
=> from 모듈이름 import 속성이름이나 함수 나열 : 모듈에 존재하는 것 중에서 나열된 것만
현재 모듈에 포함시킵니다
from math import PI : PI로 사용합니다
=> from 모듈이름 import * : 모듈의 모든 것을 현재 모듈에 포함시킵니다
from math import * : PI , cos() 형태로 사용합니다.
=> import 모듈이름 as 별명 : 모듈을 별명으로 가져옵니다.
import pandas as pd. pandas 라는 모듈을 pd 라는 이름으로 사용합니다.
import numpy as np : numpy 라는 모듈을 np라는 이름으로 사용합니다.
=> from 모듈이름 Import 속성이름이나 메소드이름 as 별명
3) 모듈을 찾는 순서
# 모듈을 찾는 순서를 확인
import sys
for path in sys.path
print(path)
4) 모듈을 찾는 위치를 추가
=> 프로그램 내에서 추가
import sys
sys.path.append('검색할 경로')
-> 환경 설정을 이용
PYTHONPATH = 검색경로
mypi = 3.14
def area(r):
print(r * r * mypi)
메모장에 pythom.py로 저장후
불러올때는
sys.path.append('저장경로')
2.패키지
=> 모듈을 모아놓은 디렉토리와 비슷한 개념
=> 파이썬에 배포를 하거나 설치를 할 때는 패키지 단위로 해야 합니다.
=> 디렉토리가 패키지 될려면 디렉토리 안에 __init__.py 파일이 있어야 함
내용은 상관 없다
1) 패키지가 설치되는 디렉토리 확인
import sys
sys.path
=> 이 명령을 사용하는 자신의 컴퓨터에 파이썬이 2가지 버전 이상이 설치되었거나 가상환경을 만들어서 실행하는 경우
확인합니다.
2) 패키지 안에 __main__.py 를 만들면 터미널에서 Python 하고 디렉토리 이름을 입력하면 __main__.py 파일이 실행됩니다
__main__.py 파일이 실행됩니다.
pip install 외부모듈이름
=> 외부 모듈 이름 뒤에 -upgrade 를 추가하면 기존의 모듈이 업데이트 됩니다.
=버전을 추가하면 버전이 설치됩니다.
>=버전의 형태로도 설정 가능
=> 최신 버전의 모듈을 설치하려고 하면 pip 를 업그레이드 하라는 메시지가 출력되기도 합니다.
python -m pip install --upgrade pip
=> 자신에게 설치된 패키지 확인
pip list --format=coloms
=> 패키지 삭제
pip uninstall 패키지 이름 -y
=> 폐쇄망에서 인터넷에서 다운로드가 안되는 경우가 있습니다.
다른 곳에서 pip download 패키지이름 으로 다운로드를 받아서 컴퓨터에 복사한 후 pip install 패키지파일 이름을 입력해야 합니다.
실습 1: 현재 컴퓨터에 설치된 패키지 확인
pip list -- format=columns
cmd 창에서 입력하면 패키지 이름과 버전이 뜬다
실습 2: 다른 패키지를 이용해서 그래프를 출력
=> mataplotlib 패키지의 pyplot 이라는 모듈을 이용합니다.
figure(figsize=(가로너비 , 세로너비)) 를 호출해서 그래프를 그릴 영역을 만듭니다.
그래프 ( 데이터 나열 ) 를 호출하면 그래프가 그려집니다.
show() 를 호출하면 화면에 출력됩니다.
save를 호출하면 파일로 저장됩니다.
* 그래프 만들기 *
import matplotlib.pyplot as plt
#그래프 크기 설정
fig = plt.figure(figsize=(10,5))
#그래프 그리기
plt.boxplot(([100,89,29,10,28],[10,30,90,23,16]))
#화면에 출력
plt.show()
#파일에 저장
fig.savefig('graph.png')
실습3 ) 지도 만들기
mport folium
m = folium.map(lacation=[37.572565, 126.973304],zoom_start=15)
m.save('map.html')
경로에 저장된 map.html 을 눌러보면 화면이 출력된다.
'Python' 카테고리의 다른 글
[파이썬] 파이썬 정리2 (0) | 2021.01.24 |
---|---|
[파이썬] 파이썬의 정리 (0) | 2021.01.23 |
[파이썬] 상속 (0) | 2021.01.23 |
[파이썬] 상속 (0) | 2021.01.17 |
[파이썬] 클래스 객체 지향 프로그래밍 (0) | 2021.01.17 |