- private 속성값을 읽고 쓰기 위해 getter/setter 메서드를 사용한다.
- 파이썬에서는 getter/setter 메서드가 필요 없다. 모든 속성과 메서드는 public이다.
- getter/setter를 써야 한다면 프로퍼티를 사용하자.
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 set_name(self, input_name): print('inside the setter') self.hidden_name = input_name name = property(get_name, set_name)
두 메서드를
name
이라는 속성의 프로퍼티로 정의함.fow1 = Duck('Howard') fow1.name
inside the getter ‘Howard’
fow1.get_name()
inside the getter ‘Howard’
fow1.name = 'Daffy'
inside the setter
fow1.name
inside the getter ‘Daffy’
fow1.set_name('Daffy')
inside the setter
fow1.name
inside the getter ‘Daffy’
- 프로퍼티를 정의 하는 또 다른 방법은 데커레이터를 사용 하는 것.
- getter 메서드 앞에 @property 데커레이터를 쓴다.
- setter 메서드 앞에 @name.setter 데커레이터를 쓴다.
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
fow1 = Duck('Howard') fow1.name
inside the getter ‘Howard’
fow1.name = 'Donald'
inside the setter
fow1.name
inside the getter ‘Donald’
- 프로퍼티는 계산된 값을 참조 할 수 있다.
class Circle(): def __init__(self, radius): self.radius = radius @property def diameter(self): return 2 * self.radius
c = Circle(5) c.radius
5
c.diameter
10
c.radius = 7 c.diameter
14
c.diameter = 20
AttributeError Traceback (most recent call last)
Comments