코드 6-27 oop1/oop1_3/datahandler.py ①
from statistics import * import openpyxl class DataHandler: evaluator = Stat() #1 @classmethod def get_data_from_excel(cls, filename): #2 dic = {} wb = openpyxl.load_workbook(filename) ws = wb.active g = ws.rows for name, score in g: dic[name.value] = score.value return dic def _ _init__(self, filename, year_class): self.rawdata = DataHandler.get_data_from_excel(filename) self.year_class = year_class # 연산한 값을 저장해 두는 저장소 # 필요할 때 연산하되 # 이미 연산된 값이면 연산 없이 저장된 값을 반환 self.cache = { } #3
먼저 클래스 멤버 evaluator에 Stat 객체를 할당합니다(#1). Stat 객체의 평균, 분산, 표준편차 연산 함수는 모든 객체가 공유해서 사용하면 됩니다. 인스턴스 멤버보다는 클래스 멤버가 더 어울립니다.
그런 다음 엑셀 파일에서 데이터를 읽어오는 함수를 클래스 메서드로 만듭니다(#2). 이렇게 하면 DataHandler 객체를 만들지 않아도 파일에서 데이터를 꺼내 볼 수 있습니다. 그리고 객체에 연산 결과를 저장해 둘 캐시로 딕셔너리를 사용합니다(#3).