개설된 계좌 수(num_acnt)를 클래스 멤버로 만들어 줍니다(#1). 그리고 클래스 멤버를 반환하는 클래스 메서드 get_num_acnt를 정의합니다(#2). __init__() 안에 있는 self.user와 self.balance는 객체마다 다른 값을 가지는 인스턴스 멤버입니다(#3). 객체를 생성할 때마다 클래스 멤버인 계좌 수를 하나씩 늘려 줍니다(#4). transfer() 메서드는 메시지 패싱을 하는 함수고(#5) __str__() 메서드는 파이썬이 예약한 함수입니다(#6). 객체 obj를 만들고 print(obj)를 실행하면 __str__() 메서드에서 반환된 문자열이 출력됩니다.
코드 6-18 oop1/oop1_2/account.py ②
if __name__= = "__main__": # 객체 생성 my_acnt = Account('greg', 5000) your_acnt = Account('john', 1000) # 생성 확인 print('object created') print(my_acnt) print(your_acnt) print() # 인스턴스 메서드를 호출하는 방법 #1. by object my_acnt.deposit(500) #7 #2. by class # Account.deposit(my_acnt, 500) #8 # deposit 확인 print('deposit') print(my_acnt) print() # withdraw 함수 사용법 print('withdraw') money = my_acnt.withdraw(1500) if money: print('withdrawn money : {}'.format(money)) else: print('Not enough to withdraw') print() # 클래스 멤버에 접근하는 방법 print('class member') #1.by class print(Account.num_acnt) #2.by object #print(my_acnt.num_acnt) print() # 클래스 메서드를 호출하는 방법 print('class method') #1.by class n_acnt = Account.get_num_acnt() #2.by object #n_acnt = my_acnt.get_num_acnt() print('The number of accounts : {}'.format(n_acnt)) print() # 메시지 패싱 print("message passing") print(my_acnt) print(your_acnt) res = my_acnt.transfer(your_acnt, 2000) if res: print('transfer succeeded') else: print('transfer failed') print(my_acnt) print(your_acnt)