2011년 8월 22일 월요일

파이썬 클래스 property


파이썬 클래스 중에서 property라는 것에 대해서 살펴보겠습니다.

property는 데코레이터로 들어갑니다.

property는 실제모양을 보면 attribute와 거의 유사하지만,

차이점은 실제 데이터를 access 할때 그 값을 계산을 합니다.


import math
class Rectangle(object):
    
    def __init__(self,r):
        self.r = r
    
    @property
    def area(self):
        return self.r*self.r
    
    @property
    def sqrt(self):
        return self.r*math.sqrt(2)
  
a = Rectangle(4)
    
print a.area  # 16 
print a.sqrt  # 5.65685424949
    
a.area = 1  # AttributeError: can't set attribute
   
        

여기서 보시면 a.r 은 attribute입니다 읽기, 쓰기가 모두 됩니다.
반면에 a.area랑 a.sqrt는 읽기만 되고, 또, 호출할때 그 값을 계산을 합니다.

그래서 이것을 보완 하기 위해서 setter와 deleter에 access가 가능합니다.

원래는 property를 class에 추가하기 위해서 getter, setter, deleter를 추가하던 방식에서
간단히 decorator를 이용한 방식으로 변경이 된것입니다.


댓글 없음:

댓글 쓰기