본문 바로가기
인터페이스 개발/Python

Python - 모듈과 패키지[예제] - 주소록+메모장(2)

by cooluk 2020. 7. 28.

Chap.16 모듈과 패키지[예제] - 주소록+메모장(2)

 

모듈과 패키지[예제]

주소록+메모장(2)

 

주소록+메모장(2)

myapp.py util.py  \PYTHON_LIB 로 이동

PC -> 속성 -> 고급 시스템 설정 -> 환경변수 -> 시스템 변수 -> 새로 만들기
변수이름 PYTHONPATH
변수값 C:\PYTHON_LIB

 

\PYTHON_LIB\util.py

# util.py

INCH = 2.54

def calcsum(n):
    sum = 0
    for num in range(n+1):
        sum += num
    return sum


if __name__ == "__main__" :  # 단독 실행되었다면 True
    print("1inch = ", INCH)
    print("~10 = ", calcsum(10))

 

\PYTHON_LIB\myapp.py

# myapp.py

class MenuItem:

    def __init__(self, title, action=None):
        self.title = title
        self.action = action

    def __str__(self):
        return f"<MenuItem {self.title}>"

    def __repr__(self):
        return f"<MenuItem {self.title}>"

    def run(self):
        self.action()


class Application:
    def __init__(self):
        self.menu = Menu()
        self.create_menu(self.menu)  # 추가

    def create_menu(self, menu):  # 추가
        pass  # 자식에서 오버라이드 된다면 자식에서 구성할 수 있다.

    def run(self):  # 공통
        while True:
            self.menu.print()
            sel = int(input("선택] "))
            self.menu.run(sel)


class Menu:

    def __init__(self):
        self.menus = []

    def add(self, menu_item):
        self.menus.append(menu_item)

    def print(self):
        print("[메뉴]", end=' ')
        for i, menu in enumerate(self.menus):
            print(f"{i}:{menu.title}  ", end="")
        print()

    def run(self, select):
        if select >= len(self.menus):
            print("잘못된 메뉴 선택입니다")
            return
        self.menus[select].run()

 

실행

from myapp import Application, MenuItem
import sys


class NotepadApp(Application):
    def __init__(self):
        super().__init__()

    def create_menu(self, menu):  # 이렇게 할 수도 있다. 가독성이 좋다.
        menu.add(MenuItem("열기", self.open))
        menu.add(MenuItem("저장", self.save))
        menu.add(MenuItem("목록보기", self.print_list))
        menu.add(MenuItem("종료", self.exit))

    def open(self):
        print("열기를 실행합니다.")

    def save(self):
        print("저장을 실행합니다.")

    def print_list(self):
        print("목록 보기를 실행합니다.")

    def exit(self):
        sys.exit(0)


def main():
    app = NotepadApp()  # 자식을 호출
    app.run()


if __name__ == "__main__":
    main()              # 모듈로 쓸수 있다.

결과

[메뉴] 0:열기  1:저장  2:목록보기  3:종료  
선택] 0
열기를 실행합니다.
[메뉴] 0:열기  1:저장  2:목록보기  3:종료  
선택] 1
저장을 실행합니다.
[메뉴] 0:열기  1:저장  2:목록보기  3:종료  
선택] 2
목록 보기를 실행합니다.
[메뉴] 0:열기  1:저장  2:목록보기  3:종료  
선택] 0
열기를 실행합니다.
[메뉴] 0:열기  1:저장  2:목록보기  3:종료  
선택] 3

댓글