[점프 투 파이썬] Chapter 06 : 파이썬 날개달기
Immutable(변하지 않는다 ) vs Mutable(변할수 있다)
- Immutable: 정수, 실수 , 문자열, 튜플 → 새로운 값으로 할당
- Mutable : 리스트, 딕셔너리, 집합 → 기존 값에 값을 추가
클래스
반복되는 변수 & 메서드를 미리 정해놓은 틀
- 반복되는 변수, 메서드를 계속 반복하면 가독성이 떨어지고 복잡해지기 때문에 틀을 만들어놓고, 새로운 인스턴스를 만들어낸다
# 틀짜기
class Calculator:
def __init__(self):
self.result = 0
def add(self,num):
self.result += num
return self.result
# 틀을 이용해서 인스턴스 객체 만들기
cal1 = Calculator()
cal2 = Calculator()
# 사용
print(call.add(3))
print(call.add(4))
print(cal2.add(3))
print(cal2.add(7))
응용
class FourCal:
def __init__(self, first, second): # 예약어, 이게 무조건 맨처음 실행됨
self.first = first
self.second = second
def setdata(self, first, second): # self는 생성한 인스턴스에 바인딩 된다
self.first = first # 이제 self.first = a.first 값은 4가 되는것이다
self.second = second
def add(self):
result = self.first + self.second
return result
# 데이터 설정하기 (값 할당)
a = FourCal()
a.setdata(1, 2)
print(a.first)
print(a.second)
# 전달한 값으로 더하기
print(a.add())
# __init__
a = FourCal() # inint 떄문에 생성자 함수 호출할때부터 인자를 넣어야한다
a.setdata(1, 2)
클래스의 상속
기존 부모 클래스에서 정의한 값, 메서드를 그대로 상속받아 사용 , 더 나아가 활용함
class 자식클래스변수(부모클래스): # (부모클래스) -> 상속 부모
pass # 부모의 기능을 그대로 씀
- 자식에게도 init 을 선언해도 된다
메서드 오버라이딩
부모 기능을 재구성함
class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
# 부모클래스의 똑같은 div를 재할당 함으로, 기능을 달리함
class SageFourCal(FourCal):
def div(self):
if self.second == 0:
return 0
else:
return self.first / self.second
a = SafeFourCal(4, 0)
a.div() # 0이 나온다
클래스 변수, 객체 변수
class FourCal:
first = 3 # 클래스 변수 : 클래스에 공통적으로 사용되는 변수
self.fisst = frist # 객체 변수 : 인스턴스에 할당할 변수
모듈이란?
미리 만들어 놓은 .py 파일
# mod1.py
def add(a,b):
return a+b
# 내 파일을 런타임 하면 해당 name은 main이다, 하지만 import해서 쓸경우 improt한 곳이 main이 된다
# 이를 이용하면 내 파일로 런타임을 할때만 원하는 코드가 나오게 할수있다
if __name__ == "__main__":
print(add(1,2))
print(add(3,4))
#이라 할때..
import mod1 # import로 불러 오고
print(mod1.add(1,2)) # 사용한다
from mod1 import add # mod1에서 add만 쓴다
print(add(1,2)
# import 경로 찾기
import sys
sys.path.append("C:\\~~~~~\\~~") # sys는 경로에 해당 경로를 넣어준다
패키지란?
모듈 여러개를 모아 놓은 것
game/ # 루트 디렉터리
__init__.py # <=패키지를 설정하는 파이썬 파일
sound/ # 서브 디렉터리
__init__.py
echo.py
wav.py
graphic/
__init__.py
screen.py
render.py
play/
__init__.py
run.py
test.py
반복되는 변수 & 메서드를 미리 정해놓은 틀
- 반복되는 변수, 메서드를 계속 반복하면 가독성이 떨어지고 복잡해지기 때문에 틀을 만들어놓고, 새로운 인스턴스를 만들어낸다
# 틀짜기
class Calculator:
def __init__(self):
self.result = 0
def add(self,num):
self.result += num
return self.result
# 틀을 이용해서 인스턴스 객체 만들기
cal1 = Calculator()
cal2 = Calculator()
# 사용
print(call.add(3))
print(call.add(4))
print(cal2.add(3))
print(cal2.add(7))
응용
class FourCal:
def __init__(self, first, second): # 예약어, 이게 무조건 맨처음 실행됨
self.first = first
self.second = second
def setdata(self, first, second): # self는 생성한 인스턴스에 바인딩 된다
self.first = first # 이제 self.first = a.first 값은 4가 되는것이다
self.second = second
def add(self):
result = self.first + self.second
return result
# 데이터 설정하기 (값 할당)
a = FourCal()
a.setdata(1, 2)
print(a.first)
print(a.second)
# 전달한 값으로 더하기
print(a.add())
# __init__
a = FourCal() # inint 떄문에 생성자 함수 호출할때부터 인자를 넣어야한다
a.setdata(1, 2)
클래스의 상속
기존 부모 클래스에서 정의한 값, 메서드를 그대로 상속받아 사용 , 더 나아가 활용함
class 자식클래스변수(부모클래스): # (부모클래스) -> 상속 부모
pass # 부모의 기능을 그대로 씀
- 자식에게도 init 을 선언해도 된다
메서드 오버라이딩
부모 기능을 재구성함
class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
# 부모클래스의 똑같은 div를 재할당 함으로, 기능을 달리함
class SageFourCal(FourCal):
def div(self):
if self.second == 0:
return 0
else:
return self.first / self.second
a = SafeFourCal(4, 0)
a.div() # 0이 나온다
클래스 변수, 객체 변수
class FourCal:
first = 3 # 클래스 변수 : 클래스에 공통적으로 사용되는 변수
self.fisst = frist # 객체 변수 : 인스턴스에 할당할 변수
모듈이란?
미리 만들어 놓은 .py 파일
# mod1.py
def add(a,b):
return a+b
# 내 파일을 런타임 하면 해당 name은 main이다, 하지만 import해서 쓸경우 improt한 곳이 main이 된다
# 이를 이용하면 내 파일로 런타임을 할때만 원하는 코드가 나오게 할수있다
if __name__ == "__main__":
print(add(1,2))
print(add(3,4))
#이라 할때..
import mod1 # import로 불러 오고
print(mod1.add(1,2)) # 사용한다
from mod1 import add # mod1에서 add만 쓴다
print(add(1,2)
# import 경로 찾기
import sys
sys.path.append("C:\\~~~~~\\~~") # sys는 경로에 해당 경로를 넣어준다
패키지란?
모듈 여러개를 모아 놓은 것
game/ # 루트 디렉터리
__init__.py # <=패키지를 설정하는 파이썬 파일
sound/ # 서브 디렉터리
__init__.py
echo.py
wav.py
graphic/
__init__.py
screen.py
render.py
play/
__init__.py
run.py
test.py
미리 만들어 놓은 .py 파일
# mod1.py
def add(a,b):
return a+b
# 내 파일을 런타임 하면 해당 name은 main이다, 하지만 import해서 쓸경우 improt한 곳이 main이 된다
# 이를 이용하면 내 파일로 런타임을 할때만 원하는 코드가 나오게 할수있다
if __name__ == "__main__":
print(add(1,2))
print(add(3,4))
#이라 할때..
import mod1 # import로 불러 오고
print(mod1.add(1,2)) # 사용한다
from mod1 import add # mod1에서 add만 쓴다
print(add(1,2)
# import 경로 찾기
import sys
sys.path.append("C:\\~~~~~\\~~") # sys는 경로에 해당 경로를 넣어준다
모듈 여러개를 모아 놓은 것
game/ # 루트 디렉터리
__init__.py # <=패키지를 설정하는 파이썬 파일
sound/ # 서브 디렉터리
__init__.py
echo.py
wav.py
graphic/
__init__.py
screen.py
render.py
play/
__init__.py
run.py
test.py
폴더는 디렉터리, .py
는 파이썬 모듈이다
패키지만들기
# 실행하는 방법, 경로가 중간에 끊기면 ㄴㄴ
import game.sound.echo
game.sound.echo.echo_test()
# 특정 모듈를 가져올때
from game.sound import echo
echo.echo_test()
# 특정 모듈의 메서드를 가져올때
from game.sound.echo import echo_test
echo_test()
# 모듈의 이름을 바꿔서 사용
from game.sound.echo import echo_test as e
e()
# 해당 디렉터리 하부의 모든 모듈 가져오기
from game.sound import *
__all__ = ['echo' , '사용할 모듈', '가져올 모듈' ...]
# 상대 경로로 가져오기 (..=지금 보고있는 파일 기준 한단계 위)
from ..sound.echo import echo_test
echo_test
예외 처리
오류가 발생했을때 프로그램이 종료되지 않고, 처리 하는것
오류가 발생할수 있는 구문?
- try: 오류가 발생할수 있는 구문
- except Exception as e : 오류 발생
- else: 오류 발생 ㄴㄴ
- finally: 무조건 마지막에 실행
try, except문
try:
...
except [발생 오류[as 오류 메시지 변수]]:
...
# 에러
try:
4/0
except ZeroDivisionError[as e]]:
print(e)
# else 이용
try:
f = open('none','r')
except FileNotFoundError as a:
print(ste(e))
else : # 구문에 에러가 없을때(성공) 했을때 실행해라
data = f.read()
print(data)
f.close()
try .. finally
f = open('foo.txt', 'w')
try:
# 무언가를 수행한다.
data = f.read()
print(data)
except Exception as e: # Exception은 모든 에러의 부모 클래스, 상속받아서 다 알수있다
print(e)
finally:
f.close() # 성공, 실패 상관 없이, 코드가 실행됨
# 여러 조건
try:
a = [1,2]
print(a[3])
4/0
except ZeroDivisionError as e:
print(e)
except IndexError as e:
print(e)
예외 처리
# 예외 처리 - 오류 회피하기
try:
f = open("나없는파일", 'r')
except FileNotFoundError:
pass
# 예외 처리 - 오류 일부러 발생시키기
class Bird:
def fly(self):
raise NotImplementedError # 이게 실행되면 에러가 생김
# 변형하면 fly을 사용할수있음
class Eagle(Bird):
def fly(self):
print("very fast")
eagle = Eagle()
eagle.fly()
오류가 발생했을때 프로그램이 종료되지 않고, 처리 하는것
try:
...
except [발생 오류[as 오류 메시지 변수]]:
...
# 에러
try:
4/0
except ZeroDivisionError[as e]]:
print(e)
# else 이용
try:
f = open('none','r')
except FileNotFoundError as a:
print(ste(e))
else : # 구문에 에러가 없을때(성공) 했을때 실행해라
data = f.read()
print(data)
f.close()
f = open('foo.txt', 'w')
try:
# 무언가를 수행한다.
data = f.read()
print(data)
except Exception as e: # Exception은 모든 에러의 부모 클래스, 상속받아서 다 알수있다
print(e)
finally:
f.close() # 성공, 실패 상관 없이, 코드가 실행됨
# 여러 조건
try:
a = [1,2]
print(a[3])
4/0
except ZeroDivisionError as e:
print(e)
except IndexError as e:
print(e)
# 예외 처리 - 오류 회피하기
try:
f = open("나없는파일", 'r')
except FileNotFoundError:
pass
# 예외 처리 - 오류 일부러 발생시키기
class Bird:
def fly(self):
raise NotImplementedError # 이게 실행되면 에러가 생김
# 변형하면 fly을 사용할수있음
class Eagle(Bird):
def fly(self):
print("very fast")
eagle = Eagle()
eagle.fly()
에러 처리를 쉽게해, 재사용성과 유지보수를 쉽게 한다
내장함수
빌트인 함수, 기본적으로 있는 함수
# abs : 절대값
>>> abs(3)
3
>>> abs(-3)
3
>>> abs(-1.2)
1.2
# all : 리스트 참인지 검사
>>> all([1, 2, 3])
True
# any : 하나라도 참?
>>> any([1, 2, 3, 0])
True
# 아스키 코드 받아 문자 출력 (알고리즘에서 사용함)
>>> chr(97)
'a'
>>> chr(44032)
'가'
# dir : 객체가 자체적으로 가지고 있는 변수나 함수를 보여 준다(프로퍼티, 메서드)
>>> dir([1, 2, 3])
['append', 'count', 'extend', 'index', 'insert', 'pop',...]
>>> dir({'1':'a'})
['clear', 'copy', 'get', 'has_key', 'items', 'keys',...]
... 너무 많아서 찾아보자
divmod
enumerate
eval
* filter
hex
id
* input
* int
isinstance
* len
* list
* map
max
min
oct
* open
ord
pow
* range
round
* sorted
str
* sum
tuple
*type
*zip
*는 꼭보자
외장 함수
라이브러리에서 가져다 쓰는 함수
빌트인 함수, 기본적으로 있는 함수
# abs : 절대값
>>> abs(3)
3
>>> abs(-3)
3
>>> abs(-1.2)
1.2
# all : 리스트 참인지 검사
>>> all([1, 2, 3])
True
# any : 하나라도 참?
>>> any([1, 2, 3, 0])
True
# 아스키 코드 받아 문자 출력 (알고리즘에서 사용함)
>>> chr(97)
'a'
>>> chr(44032)
'가'
# dir : 객체가 자체적으로 가지고 있는 변수나 함수를 보여 준다(프로퍼티, 메서드)
>>> dir([1, 2, 3])
['append', 'count', 'extend', 'index', 'insert', 'pop',...]
>>> dir({'1':'a'})
['clear', 'copy', 'get', 'has_key', 'items', 'keys',...]
... 너무 많아서 찾아보자
divmod
enumerate
eval
* filter
hex
id
* input
* int
isinstance
* len
* list
* map
max
min
oct
* open
ord
pow
* range
round
* sorted
str
* sum
tuple
*type
*zip
*는 꼭보자
라이브러리에서 가져다 쓰는 함수
라이브러리는 개발자들이 계속 만듬 ⇒ 겁나 편함
# pickle : 객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈
>>> import pickle
>>> f = open("test.txt", 'wb')
>>> data = {1: 'python', 2: 'you need'}
>>> pickle.dump(data, f)
>>> f.close()
# time : 시간과 관련된 time 모듈
>>> import time
>>> time.time()
988458015.73417199 #1970년 1월 1일 0시 0분 0초를 기준
#random : 난수(규칙이 없는 임의의 수)를 발생시키는 모듈
>>> import random
>>> random.random()
0.53840103305098674
# webbrowser : 자신의 시스템에서 사용하는 기본 웹 브라우저를 자동으로 실행하는 모듈
>>> import webbrowser
>>> webbrowser.open("http://google.com")
Author And Source
이 문제에 관하여([점프 투 파이썬] Chapter 06 : 파이썬 날개달기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dndb3599/점프-투-파이썬-Chapter-06-파이썬-날개달기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)