강의노트 08. [객체지향] property (getter, setter)
06 Apr 2017 |패스트캠퍼스 컴퓨터공학 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
property
인스턴스 생성시 제한
을 걸어두려고 할 때 유용하게 사용된다.- 사용하는 데코레이터 : @property, @메소드이름.setter
- (참고) 클래스변수는
생성자 오버로딩
시 유용하게 사용된다.
예시 1
- Person 클래스의 인스턴스 생성시 음수의 money 설정을 제한
class Person:
def __init__(self, name, mon):
self.name = name
self.money = mon # property 메소드 money에 mon 할당
#getter 함수 - 멤버변수 _money에 접근
@property
def money(self):
print("getter 실행!")
return self._money # 클래스의 ._money 변수값 리턴
#setter 함수 - 멤버변수 _money 설정 및 변경
@money.setter
def money(self, how_much):
print("setter 실행!")
if how_much < 0:
self._money = 0 # 클래스의 ._money 변수값 할당
else:
self._money = how_much # 클래스의 ._money 변수값 할당
def __str__(self):
return "name : {}, money : {}".format(self.name, self._money)
#인스턴스 생성
p1 = Person('monkey', -500)
p1.money # getter 실행! 0
p1._money # 0
p1.money = 50 # setter 실행!
p1.money # getter 실행! 50
p1._money # 50
예시 2
- rainbow 클래스의 인스턴스 생성시 특정 색 이외의 colors 설정을 제한
- 속성(성질)에 대한 좀 더 명확한 정의를 property를 통해서 생성
# 클래스 정의
class rainbow:
def __init__(self):
self.COLORS = ['빨', '주', '노', '초', '파', '남', '보']
self._colors = self.COLORS
@property
def colors(self):
print("getter 실행!")
return self._colors
@colors.setter
def colors(self, color_set_list):
print("setter 실행!")
self._colors = [color for color in color_set_list if color in self.COLORS]
# 인스턴스 생성
my_rainbow = rainbow()
my_rainbow._colors # ['빨', '주', '노', '초', '파', '남', '보']
my_rainbow.colors # getter 실행! ['빨', '주', '노', '초', '파', '남', '보']
my_rainbow.colors = ['흰', '검', '빨', '주', '노'] # setter 실행!
my_rainbow._colors # ['빨', '주', '노']
my_rainbow.colors # getter 실행! ['빨', '주', '노']