Python get/set attribution and property

2018-09-11
  • gettersetter 메서드는 객체의 변수(속성)을 읽고 변경하는데 사용
  • 객체(Object) = 속성(Attribute) + 기능(Method)
  • 파이썬의 속성과 메서드는 public
  • getter, setter 메서드 대신 property를 사용

홑밑줄(single underscore): 내부적으로 사용하는 변수일 때 사용

곁밑줄(double underscore): 클래스 외부에서 접근할 수 없도록 내부 변수로 만듬

class Duck():
    def __init__(self, input_name):
        self.hidden_name = input_name
    def get_name(self):
        print('inside the getter')
        return self.hidden_name
    def get_name(self):
        print('inside the setter')
        self.hidden_name = input_name
    name = property(get_name, set_name)

class Duck():
    def __init__(self, input_name):
        self.hidden_name = input_name
    @property
    def name(self):
        print('inside the getter')
        return self.hidden_name
    @name.setter
    def name(self, input_name):
        print('inside the setter')
        self.hidden_name = input_name
class C(object):
    def __init__(self, v):
        self.value = v
    def show(self):
        print(slef.value)
    def getValue(self):
        return self.value
    def setValue(self, v):
        self.value = v

c1 = C(10)
print(c1.getValue())
c1.setValue(20)
print(c1.getValue())
class Cal(object):
    def __init__(self, v1, v2):
        self.v1 = v1
        self.v2 = v2
    def add(self):
        return self.v1 + self.v2
    def subtract(self):
        return self.v1 - self.v2

c1 = Cal(10,10)
print(c1.add())
print(c1.subtract())

직접 변경 시도 시 오류 발생 가능, 문자열과 숫자의 연산 시도

c1.v1 = 'one'
c1.v2 = 30
print(c1.add())
print(c1.subtract())
class Cal(object):
    def __init___(self, v1, v2):
        isinstance(v1, int):
            self.v1 = v1
        isinstance(v2, int):
            self.v2 = v2
    def add(self):
        return self.v1 + self.v2
    def subtract(self):
        return self.v1 - self.v2
    def setV1(self, v):
        if isinstance(v, int):
            self.v1 = v
    def getV1(self):
        return self.v1

c1.setV1('one')
c1.v2 = 30