반복되는 변수 & 메서드를 미리 정해놓은 틀
# 틀짜기
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 # 부모의 기능을 그대로 씀
부모 기능을 재구성함
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
는 파이썬 모듈이다
# 실행하는 방법, 경로가 중간에 끊기면 ㄴㄴ
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 [발생 오류[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
*는 꼭보자
라이브러리에서 가져다 쓰는 함수
라이브러리는 개발자들이 계속 만듬 ⇒ 겁나 편함
# 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")