개설된 계좌 수(num_acnt)를 클래스 멤버로 만들어 줍니다(#1). 그리고 클래스 멤버를 반환하는 클래스 메서드 get_num_acnt를 정의합니다(#2). __init__() 안에 있는 self.userself.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)
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.