[Python]Property – Getter, Setter

Getter와 Setter에 대해 알아보자.

"""
Python Property(2) -- Getter, Setter
"""


# 예1 : Property 활용 Getter, Setter 작성

class SampleA:
    def __init__(self):
        self.x = 0
        self.__y = 0

    # Getter
    @property
    def y(self):
        print('called getter')
        return self.__y

    # Setter
    @y.setter
    def y(self, value):
        print('called setter')
        self.__y = value

    @y.deleter
    def y(self):
        del self.__y


a = SampleA()
a.x = 1
a.y = 2

print(f'a.x = {a.x}')
print(f'a.y = {a.y}')
"""
called setter
a.x = 1
called getter
a.y = 2
"""

# deleter
print(f'a.y = {dir(a)}')
del a.y
print(f'a.y = {dir(a)}')
"""
a.y = ['_SampleA__y', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'x', 'y']
a.y = ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'x', 'y']
"""


# 예2 : 유효성 검사 추가

class SampleB:
    def __init__(self):
        self.x = 0
        self.__y = 0

    # Getter
    @property
    def y(self):
        return self.__y

    # Setter
    @y.setter
    def y(self, value):
        if value < 0:
            raise ValueError("0보다 커야합니다.")
        self.__y = value

    @y.deleter
    def y(self):
        del self.__y


b = SampleB()
b.y = 10

# b.y = -10  예외발생

print(f'b.x = {b.x}')
print(f'b.y = {b.y}')

"""
b.x = 0
b.y = 10
"""

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다