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

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