[제로베이스 데이터 분석 취업 스쿨]Day7 python 중급

오바라이딩

하위 클래스에서 상위 클래스메서드재정의(override)한다. 

class Robot:

	def __init__(self, c, h, w):
    	self.color = c
        self.height = h
        self.weight = w
        
	def fire(self):
    	print('총알 발사!!')
        
class NewRobot(Robot):
	
    def __init__(self, c, h, w):
    	super().__init__(c, h, w)
        
 	def fire(self):
    	super().fire()
        print('레이저 발사!!')

fire()함수를 상속하면서 재정의하였다.

실습

삼각형의 넓이를 구하는 클래스를 상속받아, 넓이에 단위까지 붙혀지게끔 만들어 보세요.

class NewTriangleArea(TriangleArea):

	def __init__(self, w, h):
    	super().__init__(w, h)
        
	def getArea(self):
    	return str(super().getArea()) + 'cm2'

 

추상클래스

상위 클래스에서 하위 클래스에 매서드 구현강요한다. 

from abc import ABCMeta
from abc import abstractmethod

class AirPlan(metaclass=ABCMeta):

	@abstractmethod
    def flight(self):
    	pass
        
        
 class Airliner(Airplane):
 	def flight(self):
    	print('시속 400km/h 비행!!')

상속한 클래스에서 메서드를 완성한 뒤 사용하였다.

상속된 클래스 마다 입맛에 맛게끔 사용할 수 있다. 

 

예외란?

예외란, 문법적인 문제는 없으나, 실행 중 발생하는 예상하지 못한 문제이다. 

 

예외처리

예상하지 못한 예외가 프로그램 전체 실행에 영향이 없도록 처리함 

예외 발생 예상 구문을 try~except로 감싼다. 

실습

사용자로부터 숫자 5개를 입력받을 때 숫자가 아닌 자료형이 입력되면 예외 처리하는 프로그램을 만들어보자.

 

~else

예외가 발생하지 않은 경우 실행하는 구문이다. 

생략할 수 있는 구문이다.

nums = []
n = 1
while n < 6:

	try:
    	num = int(input('input number: '))
        
    except:
    	print('예외 발생')
        continue
        
	else:
    	if num % 2 == 0:
        	nums.append(num)
            n += 1
            
 		else:
        	print('입력한 숫자는 홀수 입니다.', end='')
            print('다시 입력 하세요.')
            continue

 

finally 

예외 발생과 상관없이 항상 실행한다. 

try:
...


except:
...

else:
...

finally:
	print(f'inputData: {inputData}')

 

Exception 클래스 

Exception 클래스를 불러와 왜 예외처리가 되었는지 알려준다. 

실습

사용자가 문자 메시지를 보낼 때 10글자 이하면 SMS로 발송하고, 10글자를 초과하면 MMS로 발송하는 프로그램을 예외 처리를 이용해서 만들어보자.

Exception에서, 인덱스를 놔둬 구분할 수 있다. 숫자부분이 e.args[1]이다.

 

사용자 예외 클래스 

exception 클래스를 상속 받아서, 오류 메시지를 사용자에 맞게끔 수정할 수 있다.

 

텍스트 파일 쓰기 

모드를 바꿀 수 있다. w, r ,a, x(파일이 기존에 있으면 에러가 난다.) 등

a 모드는 새로운 글을 더 넣을 수 있고, w는 덮어쓰기 기능이다. 

file = open('C:/pythonTxt/test.txt', 'w')

strCnt = file.write('Hello world~')
print(f'strCnt: {strCnt}')

file.close()
file = open(uri + 'prime_numbers.txt', 'a')
file.write(str(n))
file.write('\n')
file.close()

 

텍스트 파일 읽기 

uri = 'C:/pythonTxt/'
file = open(uri + 'hello_01.txt', 'r')
str = file.read()
print(f'str: {str}')
file.close()

파일에 있는 글 모두를 읽어올 수 있다. 

 

with as 

파일 열기, with as 문을 사용하면, 닫기를 생략할 수 있다. 

 

writeliness()

리스트(List) 또는 튜플 데이터를 파일에 쓰기 위한 함수이다. 

 

readlines()

파일의 모든 데이터를 읽어서 리스트 형태로 반환한다.  

readline()

한 행 읽어서 문자열로 반환 한다. 

실습

파일에 저장된 과목별 점수를 파이썬에 읽어, 딕셔너리에 저장하는 코드를 만들어보자.

scoreDic = {}

uri = 'C:/pythonTxt/'
with open(uri + 'scores.txt', 'r') as f:
	line = f.readline()
    
    while line != '':
    #라인이 비어있을 때 까지
    	tempList = line.split(':')
    #딕셔너리 형태로 만들어 준다.
        scoreDic[tempList[0]] = int(tempList[1].strip('\n')
        line = f.readline()
        
print(f'scoreDic: {scoreDic}')

{'kor':85, 'eng':90, 'mat':92, 'sci':79, 'his':82}