Property with Decorators

February 3, 2019    Advanced Python

  • property: __init__에 생성되는 특정 attribute(변수)에 getter(가져오기), setter(업데이트), deleter(제거)의 함수기능을 가지는 property class로 묶어주는 역할을 한다.
  • 아래와 같이 property class를 가져오는 형식은 아래와 같다.
    • getter(가져오기): instance.funcName
    • setter(업데이트): instance.funcName = value
    • detter(제거): del instance.funcName

Property

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

    def getName(self):
        print('Getting name')
        return self._name

    def setName(self, value):
        print('Setting name to ' + value)
        self._name = value

    def delName(self):
        print('Deleting name')
        del self._name

    # Set property to use getName, setName
    # and delName methods
    name = property(getName, setName, delName, 'Name property')

p = Person('Adam')


  • getter(가져오기)
p.name
Getting name

'Adam'


  • setter(업데이트)
p.name = 'John'
Setting name to John


  • detter(제거)
del p.name
Deleting name


  • decorator로 표현하면 아래와 같다.
    • getter 함수에 @property, 그 함수이름은 변수이름과 같으며 return이름도 같게 한다.
    • setter 함수에 @함수이름.setter, 그 함수이름은 변수이름과 같으며 return이름도 같게 한다.
    • deleter 함수에 @함수이름.deleter, 그 함수이름은 변수이름과 같으며 return이름도 같게 한다.
class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        print('Getting name')
        return self._name

    @name.setter
    def name(self, value):
        print('Setting name to ' + value)
        self._name = value

    @name.deleter
    def name(self):
        print('Deleting name')
        del self._name
p = Person('Adam')


  • getter(가져오기)
p.name
Getting name

'Adam'


  • setter(업데이트)
p.name = 'John'
Setting name to John


  • detter(제거)
del p.name
Deleting name

DSBA