2018-05-26 TIL(Python 클래스 주말 숙제)

# 도서관 클래스
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