강의노트 08. [객체지향] property (getter, setter)

|

패스트캠퍼스 컴퓨터공학 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

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 실행! ['빨', '주', '노']