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
댓글