< 데코레이션 형태 >
class 클래스 명:
    def decorator_function1():
        def wrapper():
    @decorator_function1
    def 매입함수
    def decorator_function2():
        def wrapper():
    @decorator_function2
    def 대출함수
    
    def decorator_function3():
        def wrapper():
    @decorator_function3
    def 반납함수
<기존 키오스크로 바꾸어 보기>
class LibraryKiosk:
    #초기생성자
    def __init__(self):
         #books는 맴버변수
         self.books = {}
         print('클래스 생성 되었습니다.')
    #-------------------------------------------------------    
    #도서 입고 데코레이터 함수 정의하기
    def decorator_function(func):
        def wrapper(self, book_id, title, quantity):
            func(self, book_id, title, quantity)
            # return  func
        return wrapper
    @decorator_function
    def add_book(self, book_id, title, quantity):
        if book_id in self.books:
            self.books[book_id]['quantity'] += quantity  
        else:
            self.books[book_id] = {'title':title, 'quantity':quantity}
        print(f"도서번호 : {book_id} /제목 : {title} / 입고수량 : {quantity} 입고 성공!!")
        
    #도서 대출
    def decorator_function(func):
        def wrapper(self, book_id):
            func(self, book_id)
        return wrapper    
    @decorator_function
    def borrow_book(self, book_id):
        if (book_id in self.books) and (self.books[book_id]['quantity']) > 0 :
            self.books[book_id]['quantity'] -= 1
            print("대출이 완료되었습니다.")
            print(f"도서번호:{book_id} / 제목:{self.books[book_id]['title']} / 남은재고수량:{self.books[book_id]['quantity']}")
        else:
            print("도서가 존재하지 않거나, 대출할 재고가 없습니다.")
    #도서 반납
    # def decorator_function(func):
    #     def wrapper(self, book_id):
    #         func(self, book_id)
    #     return wrapper
    @decorator_function
    def return_book(self, book_id):
        if book_id in self.books:
            self.books[book_id]['quantity'] += 1
            print(f"도서번호:{book_id} / 제목:{self.books[book_id]['title']} / 남은재고수량:{self.books[book_id]['quantity']}")
        else:
            print("해당 도서가 존재하지 않습니다.")
    #------------------------------------------------------------
#메인함수            
def main():
    kiosk = LibraryKiosk()
    print(kiosk)
    
    while True:
        print('<도서 키오스크 메뉴>')
        print('1. 도서 입고')
        print('2. 도서 대출')
        print('3. 도서 반납')
        print('4. 종료')
        choice = input('원하는 번호(1~4)를 선택하세요 : ')
        if choice == '1':
            book_id = input('도서 번호를 입력해 주세요 : ')
            title = input('도서 제목을 입력해 주세요 : ')
            quantity = int(input('입고할 권수를 입력해 주세요 : '))
            #add_book 호출되는 순간에 wrapper가 같이 실행(데코레이터 되었으므로)
            kiosk.add_book(book_id, title, quantity)
            
        elif choice == '2':
            book_id = input("대출할 도서번호를 입력해주세요 : ")
            kiosk.borrow_book(book_id)
            
        elif choice == '3':
            book_id = input("반납할 도서번호를 입력해주세요 : ")
            kiosk.return_book(book_id)
            
        elif choice == '4':
            print('종료 선택')
            break
            
        else:
            print('잘못 선택하였습니다. 다시 선택해 주세요!')
### 1. 최초 코드 시작
if __name__ == "__main__":
    main()
결과
클래스 생성 되었습니다. 
<__main__.LibraryKiosk object at 0x00000292562FCE50> 
<도서 키오스크 메뉴> 
1. 도서 입고 
2. 도서 대출 
3. 도서 반납 
4. 종료 
원하는 번호(1~4)를 선택하세요 :  1 
도서 번호를 입력해 주세요 :  001 
도서 제목을 입력해 주세요 :  기초 
입고할 권수를 입력해 주세요 :  5 
도서번호 : 001 /제목 : 기초 / 입고수량 : 5 입고 성공!! 
<도서 키오스크 메뉴> 
1. 도서 입고 
2. 도서 대출 
3. 도서 반납 
4. 종료 
원하는 번호(1~4)를 선택하세요 :  2 
대출할 도서번호를 입력해주세요 :  001 
대출이 완료되었습니다. 
도서번호:001 / 제목:기초 / 남은재고수량:4 
<도서 키오스크 메뉴> 
1. 도서 입고 
2. 도서 대출 
3. 도서 반납 
4. 종료 
원하는 번호(1~4)를 선택하세요 :  3 
반납할 도서번호를 입력해주세요 :  001 
도서번호:001 / 제목:기초 / 남은재고수량:5 
<도서 키오스크 메뉴> 
1. 도서 입고 
2. 도서 대출 
3. 도서 반납 
4. 종료 
원하는 번호(1~4)를 선택하세요 :  4 
종료 선택
728x90
    
    
  'Back-End > Python' 카테고리의 다른 글
| [Python] 파이썬 알고리즘 - 제너레이터(Generator) (1) | 2023.11.16 | 
|---|---|
| [Python] 파이썬의 기초 - 매개변수, 기본값(default) (2) | 2023.11.14 | 
| [Python] 파이썬 알고리즘 - 유니코드, 클로저(closure), 데코레이터 (3) | 2023.11.14 | 
| [Python] 파이썬 실습 - 도서 입고/대출/반납 관리를 위한 키오스크 만들기 (2) | 2023.11.13 | 
| [Python] 파이썬 환경 설정 - anaconda3, jupyter notebook (2) | 2023.11.13 |