getter, setter는 기본적으로 많이 사용하는 패턴이기 때문에 Property로 미리 만들어 져 있다. Java sprint, ORM 등등..
property가 무슨 역할을 하는지 주목하자.
# Ex1
# Property 활용 Getter, Setter 작성
class SampleA():
def __init__(self):
self.x = 0
self.__y = 0 #private
@property
def y(self):
print('Called get method')
return self.__y
@y.setter
def y(self, value):
print('Called set method')
self.__y = value
@y.deleter
def y(self):
del self.__y
a = SampleA()
a.x = 1
a.y = 2
print('Ex1 > y : ', a.y)
# deleter
del a.y
print('Ex1 > ', dir(a))
# Ex2
# Property 활용 제약 조건 추가
class SampleB():
def __init__(self):
self.x = 0
self.__y = 0 #private
@property
def y(self):
# print('Called get method')
return self.__y
@y.setter
def y(self, value):
# print('Called set method')
if value < 0 :
raise ValueError('0 보다 큰 값을 입력하세요.')
self.__y = value
@y.deleter
def y(self):
del self.__y
b = SampleB()
b.x = 1
b.y = 10
# b.y = -5 # 예외발생