Visual Studio에서 복사 붙여넣기한 것입니다. 나만 보고싶은데
공유하는 마음 가짐이 젤 중요하데요.
#Scenario - Library requires a new system
#First step : identifying the classes
class Library: #큰 개념 - 전체적인 큰 블럭을 말합니다
def __init__(self):
self.books=[] #Attributes
self.patrons=[]
def add_book(self, book):
self.book.append(book)
#self는 자기자신을 부르는애에요, 자기 자신을 말하는 딕셔너리 라고도 생각하면 됩니다
#작은개념(Constructor:생성자) // 아니 번역 개떡같이 해놨는데 뭐 생선자라니까 생선자라구 할게요
class Patron: #Patron 은 후원자를 말하기도 하지만, 주요 상점/식당의 고객들을 지칭하는 "공식어휘"
def __init__(self): #내부 애들을 지어볼까요
self.borrowed_books = [] #List to storae borrowed books
self.idname = []
self.name =[]
self.book=[]
#얘내들은 아직까지 할 줄 아는게 없습니다. 비유를 하자면 내 손에 "핸드폰"이 들려있다고 해서
#그 핸드폰이 스스로 무언가를 하는것은 아닙니다, 그러니 유저들이 "상호작용"을 해줘야하잖아요?
#그러니 함수를 설정해 어떻게 사용할지 넣어줍시다, 함수는 가능한 시나리오중 하나를 묘사하는 거라구 생각하면 편합니다
#그러니까, 앞서 비유한 핸드폰을 갖고 "친구한테 전화하기" 라는 함수를 만드는거에요.
#핸드폰 번호도 넣어주고 해야겠죠? 친구한테 전화할려면 친구 전화번호를 넣어야지 아무 번호만 넣으면 안되잖아요
def __str__(self):
return(f"{self.borrowed_books}, Your ID Num {self.idname} and {self.name}")
#__str__ 함수는 신기한 녀석입니다, 이 함수로 오브젝트를 String 으로 표현할수이써요, 생각해보니까 이놈 이름도 String 이라는걸 함수로 표현한 친구네요. 참 착한 친구에요
#객체 내부에서 넘어오는 값을 String으로 출력할때 이 착한 친구는 필수적이에요
# 만약에, 이 녀석이 없이 함수를 출력한다면, 해당 객체의 "메모리 주소"를 출력합니다
# 그러니까 메모리를 집이라고 생각한다면, 그 집의 주소를 말하는거에요
# 친구의 이름을 불러야하는데, 친구집 주소만 알고있다면 "00시 00구 00로 00아파트 00호수 사는 놈" 이라고 부르는 거잖아요? 그럼 좀 이상하잖아요?
# 그럴때 __Str__ 친구를 불러서 이름을 알려주는 겁니다, 컴퓨터는 똑똑한 친구지만 하나하나 알려줘야하는 귀찮음이 있어요.
#이제 책을 빌려봅시다
#책빌리기 함수!
def borrow_book(self,book):
if book.is_borrowed:
print(f"sorry, {book.name} is out on loan")
else:
book.is_borrowed = True #책이 빌려진게 맞다면
self.borrowed_books.append(book) #빌린책들의 리스트에 추가해봅시다
#참고로 파이썬에서 . 점은 다른 Method 에서 개념을 가져온겁니다
#헉 이거 모르면 님아 개념 놓친거임 이거 할때가 아님 개념 ㄱㄱ
def return_book(self,book):
for borrowed_book in self.borrowed_books:
if borrowed.book.name == book.name: #빌린 책의 이름이
print.is_borrowed = False
self.borrowed_books.remove(book)
def view_borrowed_book(self,book):
borrowed_books_list = []
for book in self.borrowed_book: #for 반복 함수로 리스트를 만드는 행위입니다.
print.borrowed_books_list.append(str{book}) #여기서 str은 오는 값을 string으로 출력하라는 소리입니다
#예시를 들어볼께요, 친구, 친구의 이름을 기억하기 쉽게 아저씨 같은 이름을 넣어봅시다
#김덕배(48세, 무직 배수)라는 친구를 뒀다고 생각해요
#그 친구의 나이는 우리가 48이라는걸 알아요
#근데 컴퓨터는 어린아이 같아서, 그 숫자가 왜 주어진지 말을 해줘야하거드요.
#안그러면 잉?? 48??? 뭐지 마법의 숫자인가? 하면서 아무것도 안해요 컴퓨터는 참 인생 편하게 삽니다
#그때 개발자 친구들이 말해줍니다 "예야, 48이라는 숫자는 스트링이야"
#그럼 컴퓨터가 그 숫자를 기억하고 48은 스트링이구나! 라고 기억을 할거에요
#이런 같은 개념으로 int, str, float, chr 같은 것으로 할당이 가능합니다. 콤퓨타는 인생 편하게 살아서 좋겠죠?
def __str__(self) -> str:
return(f"{self.name}, is a {self.name}")
class Book: #작은 개념 2 (Constructor)
def __init__(self, name, genre, year, is_borrowed):
self.name = name
self.genre = genre
self.year = year
self.is_borrowed = False
def __str__(self):
return(f"Title:{self.name}, Genre:{self.genre},Publish year{self.year}. is borrowed")
#만들어진 애들을 테스트 해봅시다. 내가 만든 코드니까 내가 좋아하는걸 넣을꺼에요
book1 = Book("Steins;Gate", "Sci-fi","2008", "is borrowed")
print(book1)
view_borrowed_book()
#항상 콤마가 적절히 사용되었는지 확인해봅시다... 아까도 이거땜에 오류 겁나 났엇음
#오늘 배운 중요개념
클래스가 가진 함수를 method 라고 부른다
클래스 내부에 함수를 정하고 싶으면, self를 넣어줘야한다. <---- 이건 자바나 C언어는 다른거 넣음.
클래스는 하나의 도구를 내 스스로 만드는 과정이고, 그 도구를 만들어 내가 원하는 것을 조각한다