728x90
λ°μν
νλ‘κ·Έλλ° μΈκ³λ₯Ό νꡬν©μλ€.
* class μ¬μ©ν μ€μ΅μ μλ κ²μκΈ μ°Έκ³ λ°λλλ€.
* νμκ°μ κΈ°λ₯ μΆκ°ν μ€μ΅μ μλ κ²μκΈ μ°Έκ³ λ°λλλ€.
λμ μ κ³ /λμΆ/λ°λ© κ΄λ¦¬λ₯Ό μν ν€μ€μ€ν¬ νμ΄μ¬ νλ‘κ·Έλ¨ λ°μ½λ μ΄ν° μ€μ΅ (decorator μ΄μ©)
[λ―Έμ
]
λμλͺ©λ‘ : μλ‘μ΄ μ±
μ΄ λμκ΄μ [μ
κ³ ]λμμ λ νλ‘κ·Έλ¨ μμ±
λμλμΆ : λμ λͺ©λ‘μμ μμ μ±
μ λΉλ¦¬κ³ μ ν λ [λμΆ] νλ‘κ·Έλ¨ μμ±
λμ λ°λ© : λμΆν λμλ₯Ό [λ°λ©]νκ³ μ ν λ νλ‘κ·Έλ¨ μμ±
μ’
λ£νκΈ° : μ’
λ£νκΈ°μ λν νλ‘κ·Έλ¨ μμ±
λμ μ
κ³ /λμΆ/λ°λ©/μ’
λ£ μ€ μνλ κ²μ μ ννμ λ μ λ΄μ© μνν©λλ€.
νλ‘κ·Έλ¨μ μ’
λ£νκΈ° μ κΉμ§λ μ λ΄μ©μ λꡬλ μ§ μλΉμ€λ₯Ό λ°μ μ μλλ‘ λ°λ³΅ μ€ν
λμμ λν νμΈ κ°μ μμ λ‘κ² μ μν΄μ μ§ν
[쑰건]
decorator μ μ©ν΄μ μ½λ μμ±
<μμ± μ½λ>
### κΈ°λ₯μ μνν ν΄λμ€(λͺ¨λ or λΌμ΄λΈλ¬λ¦¬) μ μ
class LibraryKiosk :
### ν΄λμ€ μμ±μ μ μ
def __init__(self) :
### λμ λͺ©λ‘μ μ μ₯ν λμ
λ리 λ³μ μμ±
# - λμλ²νΈ, λμμ λͺ©, λμμ¬κ³ μλ μ 보 λ΄κΈ°
self.books = {}
print("ν΄λμ€ μμ± λμμ΅λλ€.")
# -----------------------------------------------------------------------
### λμμ
κ³ λ°μ½λ μ΄ν° ν¨μ μ μνκΈ°
def add_book_decorator(func) :
def wrapper(self, book_id, title, quantity):
## μ
κ³ ν λμλ²νΈκ° μ‘΄μ¬νλμ§ νμΈ
# - μ‘΄μ¬νλ€λ©΄ μλλ§ μ¦κ°μν€κΈ°
func(self, book_id, title, quantity)
return wrapper
def borrow_book_decorator(func) :
def wrapper(self, book_id):
## μ
κ³ ν λμλ²νΈκ° μ‘΄μ¬νλμ§ νμΈ
# - μ‘΄μ¬νλ€λ©΄ μλλ§ μ¦κ°μν€κΈ°
func(self, book_id)
return wrapper
def return_book_decorator(func) :
def wrapper(self, book_id):
## μ
κ³ ν λμλ²νΈκ° μ‘΄μ¬νλμ§ νμΈ
# - μ‘΄μ¬νλ€λ©΄ μλλ§ μ¦κ°μν€κΈ°
func(self, book_id)
return wrapper
# -----------------------------------------------------------------------
### λμμ
κ³ κΈ°λ₯ μ μνκΈ°
@add_book_decorator
def add_book(self, book_id, title, quantity) :
## μ
κ³ ν λμλ²νΈκ° μ‘΄μ¬νλμ§ νμΈ
# - μ‘΄μ¬νλ€λ©΄ μλλ§ μ¦κ°μν€κΈ°
if book_id in self.books :
# self.books[book_id]["quantity"] = self.books[book_id]["quantity"] + quantity
self.books[book_id]["quantity"] += quantity
# - μ‘΄μ¬νμ§ μλλ€λ©΄
else :
# {"001" : {"title":"νμ΄μ¬ κΈ°μ΄", "quantity":4}}
self.books[book_id] = {"title":title, "quantity":quantity}
print(f"λμλ²νΈ:{book_id} / μ λͺ© : {title} / μ
κ³ μλ : {quantity} μ
κ³ μ±κ³΅!!" )
### λμΆ κΈ°λ₯ μ μνκΈ°
@borrow_book_decorator
def borrow_book(self, book_id) :
### λμΆνκ³ μνλ λμλ²νΈμ ν΄λΉνλ μ¬κ³ μλ νμΈνκΈ°
if (book_id in self.books) and (self.books[book_id]["quantity"] > 0) :
#self.books[book_id]["quantity"] = self.books[book_id]["quantity"] - 1
self.books[book_id]["quantity"] -= 1
print(f"λμλ²νΈ:{book_id} / μ λͺ©:{self.books[book_id]['title']} / λ¨μμ¬κ³ μλ:{self.books[book_id]['quantity']}")
else :
print("λμκ° μ‘΄μ¬νμ§ μκ±°λ, λμΆν μ¬κ³ κ° μμ΅λλ€.")
### λ°λ© κ°λ₯ μ μνκΈ°
@return_book_decorator
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("ν΄λΉ λμκ° μ‘΄μ¬νμ§ μμ΅λλ€.")
### 2. μ΅μ΄μ μ€νν κΈ°λ₯(ν¨μ) μ μ
def main():
### ν΄λμ€ μμ±νκΈ°
# - μ΅μ΄ νλ² : νλ‘κ·Έλ¨μ΄ μ’
λ£λλ©΄ ν΄λμ€λ μλ©Έ(λ©λͺ¨λ¦¬ κ³΅κ° μμ )λ©λλ€.
kiosk = LibraryKiosk()
print(kiosk)
#print('μ±κ³΅!')
###3. λ©λ΄ μ ν 보μ¬μ£ΌκΈ°
while True:
print('<λμ ν€μ€μ€ν¬ λ©λ΄>')
print('1. λμ μ
κ³ ')
print('2. λμ λμΆ')
print('3. λμ λ°λ©')
print('4. μ’
λ£')
choice = input('μνλ λ²νΈ(1~4)λ₯Ό μ ννμΈμ : ')
if choice == '1':
# print('μ
κ³ μ ν')
book_id = input('λμ λ²νΈλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ : ')
title = input('λμ μ λͺ©μ μ
λ ₯ν΄ μ£ΌμΈμ : ')
quantity = int(input('μ
κ³ ν κΆμλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ : '))
# print(f"{book_id} / {title} / {quantity}")
# - ν΄λμ€ λ΄λΆμ μ
κ³ κΈ°λ₯ νΈμΆνκΈ°
kiosk.add_book(book_id, title, quantity)
elif choice == '2':
#print('λμΆ μ ν')
book_id = input("λμΆν λμλ²νΈλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ :")
### ν΄λμ€ λ΄λΆμ λμΆ κΈ°λ₯ νΈμΆνκΈ°
kiosk.borrow_book(book_id)
elif choice == '3':
#print('λ°λ© μ ν')
book_id = input("λ°λ©ν λμλ²νΈλ₯Ό μ
λ ₯ν΄μ£ΌμΈμ :")
## ν΄λμ€ λ΄λΆμ λ°λ© κΈ°λ₯ νΈμΆνκΈ°
kiosk.return_book(book_id)
elif choice == '4':
print('μ’
λ£ μ ν')
break
else:
print('μλͺ» μ ννμμ΅λλ€. λ€μ μ νν΄ μ£ΌμΈμ!')
### 1. μ΅μ΄ μ½λ μμ
if __name__ == "__main__":
### μ΅μ΄μ μ€νν κΈ°λ₯(ν¨μ) νΈμΆ
main()
<μ€ν νλ©΄>
728x90
λ°μν