더북(TheBook)

두 번째 방법은 프로퍼티(property)라는 기법입니다. 프로퍼티를 이용하면 멤버에 접근하는 것처럼 보이지만 사실은 메서드를 호출합니다. 코드를 수정하여 확인해 보겠습니다.

코드 6-25 oop1/oop1_2/info_hiding_property.py

class Account:
    def _ _init__(self, name, money):
        self.user = name
        # 인스턴스 멤버 선언이 아니라 #3의 setter 메서드를 호출
        self.balance = money     #1

    @property
    def balance(self):           #2
        return self._balance

    @balance.setter
    def balance(self, money):    #3
        if money < 0:
            return

        # 실제 인스턴스 멤버 선언이 일어나는 부분(#1 실행시(생성자 호출시))
        self._balance = money

if __name__ = = "__main__":
    my_acnt = Account('greg', 5000)
    my_acnt.balance = -3000      #4

    print(my_acnt.balance)       #5

실행결과 5000


데코레이터 @property를 함수 정의에 붙였습니다(#2). 데코레이터를 붙이는 순간 balance() 메서드는 getter 함수가 되어 Info_hiding.cpp의 get_balance() 메서드와 같은 역할을 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.