티스토리 뷰

반응형

getter, setter

python이 아닌 다른 언어를 사용하면 getter, setter에 익숙 할 것이다.

public 인스턴스 변수에 대해서는 쉽게 접근이 가능해서 따로 getter, setter를 두지 않는다. 하지만 protected, private 등의 변수를 사용하여 해당 변수에 대해서 접근하지 못하게 한 경우는 데코레이터로 getter, setter를 만들어 줄 수 있다.

getter

@property 데코레이터를 사용하여 변수이름을 함수명으로 하여 지정해 줄 수 있다.

setter

@변수명.setter 데코레이터를 사용하여 변수이름을 함수명으로 하고 파라미터로 할당할 값을 지정해주면 된다.

코드

class Student:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, val):
        self._name = val

student = Student('철수')
print(student.name)
# 철수

student.name = '영희'
print(student.name)
# 영희

처음에 철수라는 이름으로 student 인스턴스를 생성해주고 instance.name으로 name변수에 접근할 수 있다. 또한 instance.name = val을 통해 name 변수에 값을 할당해 줄 수 있다.

응용

setter를 만들어 활용하는 경우로는 인스턴스 변수에 원하지 않는 값을 할당하려고 할 때 에러메시지를 주거나 기본값으로 설정할 수 있게 된다.

class Student:
    def __init__(self, age):
        self._age = age

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, val):
        if val < 0:
            raise ValueError(f'나이는 0보다 커야 합니다. {val}')
        self._age = val


student = Student(30)
student.age = -3
# ValueError: 키는 0보다 커야 합니다. -3

위의 코드 같은 경우 나이는 0보다 작을 수 없기 때문에, 그런 값이 들어온 경우 에러처리를 해준다.


Uploaded by N2T

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday