파이썬의 @property를 살펴보기전에 Get, Set Method 를 살펴본다.
class AccessModifier:
def __init(self):
pass
def public(self):
print("Call public()")
def _protected(self):
print("Call _protected()")
def __private(self):
print("Call __pivate()")
if __name__ == "__main__":
access = AccessModifier()
access.public()
access._protected()
access.__private()
실행결과
Call public()
Call _protected()
Traceback (most recent call last):
File "C:\study\property.py", line 18, in <module>
access.__private()
AttributeError : 'AccessModifie' object has no attribute '__private'
이처럼 (언더스코어)_를 이용해서 접근제어자인 protected와 private를 표현할 수 있다.
하지만 구글 파이썬 가이드에서는
(언더스코어)__는 private과 같은 효과는 낼 순 있지만, private은 아니기 때문에 삼가해돌라고 말한다.
보통 다른 언어에서는 private 접근지정자를 사용하면,
그 값을 get을 통해 가져오고 set을 통해 지정하게 된다.
파이썬에서 get, set method를 표현하면
class AccessModifier2:
def __init(self):
self.__color = "red"
def getColor(self):
return self._color
def setColor(self,color):
self.__color = color
if __name__ == "__main__":
access2 = AccessModifier2()
print(access2.getColor())
access2.setColor("black")
print(access2.getColor())
결과
red
black
이처럼 Get , Set 매소드를 통해 값을 가져오거나 설정할 수 있다.
다른 언어에서는 get, set 메소드를 사용하지만, 파이썬은 이렇게 사용하지 않는다.
파이썬은 @property 데코레이터를 통해 Get, Set 메소드를 표현한다.
코드로 보면 한번에 이해가 가능하다.
class AccessModifier3:
def __init(self):
self.color = "red"
@property
def color(self):
return self.__color
@color.setter
def color(self,color)
self.__color = color
if __name__ == "__main__":
access3 = AccessModifier3()
print(access3.color)
access3.color = "Blue"
print(access3.color)
결과
red
Blue
마지막으로 정리하자면