# 도서관 클래스
class Library:
# 생성자 함수; 이름과 책 목록을 입력받는다.
def __init__(self, name, book_list):
self.name = name
self._book_list = book_list
# 도서관에 책을 추가한다.
def add_book(self, book):
# 만약에 책 제목이 도서관 책 목록에 없다면 추가한다.
if book.title not in self._book_list:
self.book_list.append(book)
# 책에 위치는 도서관의 이름으로 나타낸다.
book._location = self.name
else: # 만약 도서관 책 목록에 있다면 다음을 출력한다.
print('이미 존재하는 도서입니다.')
# 도서관에 있는 책을 제거한다.
def remove_book(self, book):
# 만약 책 제목이 도서관 책 목록에 있다면 제거한다.
if book.title in self._book_list:
self._book_list.remove(book)
book._location = None
else:
print('해당 도서는 존재하지 않습니다.')
@property
def info(self):
return f'현재 {self.name}에서 보유하고 있는 도서는 다음과 같습니다.\n {self._book_list}'
# 책 클래스
class Book:
# 생성자 함수; 책 제목을 입력 받는다.
def __init__(self, title):
self.title = title
self.location = None
def __repr__(self):
return f'{self.title}'
@property
def is_borrowed(self):
return f'현재 해당 도서의 위치 : {self._location}'
# 사용자 클래스
class User:
# 생성자 함수; 사용자의 이름과, 사용자가 빌린 책 목록을 받는다.
def __init__(self, username, user_book_list):
self.username = username
self.user_book_list = user_book_list
# 도서관에서 책을 빌린다.
def borrow_book(self, library, book):
# 빌리고자 하는 책 제목이 도서관 책 목록에 있다면 사용자가 빌린 책 목록에 추가하고 도서관 책 목록에서 제거한다.
if book in library._book_list:
self.user_book_list.append(book)
library._book_list.remove(book)
book._location = self.username
else: # 빌리고자 하는 책 제목이 없다면 다음을 출력한다.
print('해당 도서는 존재하지 않습니다.')
# 도서관에 책을 반납한다.
def return_book(self, library, book):
# 빌렸던 책이 사용자가 빌린 책 목록에 있다면 도서관 책 목록에 추가하고 사용자가 빌린 책 목록에서는 제거한다.
if book in self.user_book_list:
library._book_list.append(book)
self.user_book_list.remove(book)
book._location = library.name
else: # 빌린 책이 아니라면 다음을 출력한다.
print('해당 도서를 소지하고 있지 않습니다.')
# 도서관 인스턴스 생성
>>> seoul = Library('Seoul Library', [])
# 책 인스턴스 생성
>>> harry_potter = Book('Harry Potter')
>>> lord_of_ring = Book('The Lord of the Ring')
>>> marvel_comics = Book('Marvel Comics')
>>> sherlock = Book('Sherlock Holmes')
>>> flow = Book('Flow')
# 도서관에 책 추가
>>> seoul.add_book(harry_potter)
>>> seoul.add_book(lord_of_ring)
>>> seoul.add_book(marvel_comics)
>>> seoul.add_book(sherlock)
>>> seoul.add_book(flow)
# 도서관 책 목록 확인
>>> print(seoul.info)
현재 Seoul Library에서 보유하고 있는 도서는 다음과 같습니다.
[Harry Potter, The Lord of the Ring, Marvel Comics, Sherlock Holmes, Flow]
# 도서관 책 목록 삭제
>>> seoul.remove_book(flow)
>>> print(seoul.info)
현재 Seoul Library에서 보유하고 있는 도서는 다음과 같습니다.
[Harry Potter, The Lord of the Ring, Marvel Comics, Sherlock Holmes]
# 사용자 생성
>>> pch = User('박찬혁', [])
# 도서관에서 책 빌리기
>>> pch.borrow_book(seoul, harry_potter)
>>> pch.borrow_book(seoul, sherlock)
>>> pch.user_book_list # 유저가 가진 도서 목록에 해리포터와 셜록 홈즈가 추가됨.
['Harry Potter', 'Sherlock Holmes']
>>> print(seoul.info) # 해리포터와 셜록 홈즈가 대출되어 목록에서 사라졌다.
현재 Seoul Library에서 보유하고 있는 도서는 다음과 같습니다.
[The Lord of the Ring, Marvel Comics]
# 빌린책 반납하기
>>> pch.return_book(seoul, harry_potter) # 해리포터를 반납한다.
>>> pch.user_book_list # 빌린 책 목록에서 해리포터가 삭제된다.
[Sherlock Holmes]
>>> seoul.book_list # 반납된 책이 다시 도서관 책 목록으로 돌아왔다.
[The Lord of the Ring, Marvel Comics, Flow, Harry Potter]
# 책의 현재 위치 추적하기
>>> sherlock.is_borrowed
'현재 해당 도서의 위치 : 박찬혁'
Comments