파이썬(28~32)
ex)
class TriangleArea:
def init(self, w, h):
self.width = w
self.height = h
def printTriangleArea(self):
print(f'self.width : {self.width}')
print(f'self.height : {self.height}')
def getArea(self):
return self.width * self.height / 2
class NewTriangleArea(TriangleArea):
def __init__(self, w, h):
super().__init__(w, h)
def getArea(self):
return str(super().getArea()) + '㎠'
ta = NewTriangleArea(7,5)
ta.printTriangleArea()
triangleArea = ta.getArea()
print(f'triangleArea : {triangleArea}')
출력값 :
self.width : 7
self.height : 5
triangleArea : 17.5㎠
상위 클래스에서 하위 클래스에 매서드 구현을 강요한다.
ex)
from abc import ABCMeta - 매서드 구현 강요할때 써야함
from abc import abstractmethod - 매서드 구현 강요할때 써야함
class AirPlane(metaclass=ABCMeta): - 매서드 구현 강요할때 써야함
@abstractmethod -매서드 구현 강요할때 써야함
def flight(self):
pass
def forward(self):
print('전진')
def backward(self):
print('후진')
class AirLiner(AirPlane):
def __init__(self, c):
self.color = c
def flight(self):
print('시속 400km/h 비행!!')
ai = AirLiner('red')
ai.flight()
ai.forward()
ai.backward()
예외란 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제이다.
예외종류
예외 관련 클래스는 Exception 클래스를 상속한다.
예외 발생 구문을 try ~ except로 감싼다.
ex)
n1 = 10; n2 = 0
try:
print(n1 / n2) #예외처리가 필요한 부분
except:
print('예상치 못한 예외가 발생했습니다.')
print('다른 프로그램 실행은 문제가 없습니다..')
print(n1 * n2)
print(n1 - n2)
print(n1 + n2)
출력값 :
예상치 못한 예외가 발생했습니다.
다른 프로그램 실행은 문제가 없습니다..
0
10
10
try except 구문을 사용했을 때 else를 사용해야함.(예외처리 시에만)
예외 발생과 상관없이 항상 실행한다.
Exception은 예외를 담당하는 클래스이다.
ex) except Exception as e:
ex)
num1 = int(input('input number1 : '))
num2 = int(input('input number2 : '))
try:
print(f'num1 / num2 : {num1 / num2}')
except Exception as e:
print(f'exception : {e}')
print('0으로 나눌 수 없습니다.')
else:
print(f'num1 + num2 : {num1 + num2}')
print(f'num1 - num2 : {num1 - num2}')
print(f'num1 num2 : {num1 num2}')
print(f'num1 + num2 : {num1 + num2}')
print(f'num1 - num2 : {num1 - num2}')
print(f'num1 num2 : {num1 num2}')
출력값 :
input number1 : 10
input number2 : 0
exception : division by zero
0으로 나눌 수 없습니다.
num1 + num2 : 10
num1 - num2 : 10
num1 * num2 : 0
raise 키워드를 이용하면 예외를 발생시킬 수 있다.
ex) - raise Exception('0으로 나눌 수 없습니다')
기본함수 open() read() write() close()를 이용한 텍스트 파일 다루기
ex)
file = open('D:/pythonTxt/test.txt', 'w')
strCnt = file.write('hello python')
print(f'strCnt : {strCnt}')
file.close()
import time
lt = time.localtime() #time.strftime() 더 세련되게
dateStr = '['+ time.strftime('%Y-%m-%d %H:%M:%S %p') + '] '
todaySchedule = input('오늘 일정 : ')
file = open('D:/pythonTxt/test.txt', 'w')
file.write(dateStr + todaySchedule)
file.close()
Y = 년
m(소) = 월
d(소) = 일
H = 시간
M = 분
S = 초
파일모드는 파일을 어떤 목적으로 open할지 정한다.
'w' : 쓰기 전용(파일이 있으면 덮어씌움)
'a' : 쓰기 전용(파일이 있으면 덧붙임)
'x' : 쓰기 전용(파일이 있으면 에러발생)
'r' : 읽기 전용(파일이 없으면 에러발생)
ex)
uri = 'D:/pythonTxt/'
'w' 파일모드
file = open(uri + 'hello.txt', 'w')
file.write('hellow python')
file.close()
'a' 파일 모드
file = open(uri + 'hello.txt', 'a')
file.write('\nNice to meet you')
file.close()
'x' 파일 모드
file = open(uri + 'hello_01.txt', 'x')
file.write('Nice to meet you')
file.close()
'x' 파일 모드
file = open(uri + 'hello_01.txt', 'r')
str = file.read()
print(f'str: {str}')
file.close()
with ~as문을 이용하면 파일 닫기(close)를 생략할 수 있다.
ex)
uri = 'D:/pythonTxt'
with open(uri + '5_037.txt', 'a') as f:
f.write('python study!!')
with open(uri + '5_037.txt', 'r') as f:
print(f.read())
반복 가능한 자료형의 데이터를 파일에 쓰자!
writelines()는 리스트(list) 또는 튜플 데이터를 파일에 쓰기 위한 함수이다.
ex)
languages = ['c/c++', 'java', 'c#', 'python','javascript']
uri = 'D:/pythonTxt/'
for item in languages:
with open(uri + 'languages.txt', 'a') as f:
f.write(item)
f.write('\n')
uri = 'D:/pythonTxt/'
with open(uri + 'languages.txt', 'a') as f:
f.writelines(item + '\n' for item in languages)
with open(uri + 'languages.txt', 'r') as f:
print(f.read())
readlines() : 파일의 모든 데이터를 읽어서 리스트 형태로 반환한다.
readline() : 한 행을 읽어서 문자열로 반환한다.
ex)
scoresDic = {}
uri = 'D:/pythonTxt/'
with open(uri + 'scores.txt', 'r') as f:
line = f.readline()
while line != '':
tempList = line.split(':') * split함수는 :기준으로 정열
scoresDic[tempList[0]] = int(tempList[1].strip('\n'))
line = f.readline()
print(f'scores dic : {scoresDic}')