더북(TheBook)

코드 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


먼저 클래스 멤버 evaluatorStat 객체를 할당합니다(#1). Stat 객체의 평균, 분산, 표준편차 연산 함수는 모든 객체가 공유해서 사용하면 됩니다. 인스턴스 멤버보다는 클래스 멤버가 더 어울립니다.

그런 다음 엑셀 파일에서 데이터를 읽어오는 함수를 클래스 메서드로 만듭니다(#2). 이렇게 하면 DataHandler 객체를 만들지 않아도 파일에서 데이터를 꺼내 볼 수 있습니다. 그리고 객체에 연산 결과를 저장해 둘 캐시로 딕셔너리를 사용합니다(#3).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.