파이썬/파이썬 정리
Python) getter/setter
곽병권
2023. 10. 23. 11:34
728x90
은닉된 속성에 대한 인터페이스로 getter와 setter가 있습니다.
게터 세터 라고 부릅니다.
세터(setter)는 개체에 속성을 설정하는 역할의 메서드 입니다.
반대로 게터(getter)는 개체의 속성을 반환하는 역할의 메서드 입니다.
세터에다가 이 개체가 어떻게 이루어져 있는지 설정해놓고 게터로 반환하는 형식으로 이루어져 있습니다.
class exam:
def __init__(self, x, y):
self.__x = x
self.__y = y
def setX(self, x):
self.__x = x
def setY(self, y):
self.__y = y
def getX(self):
return self.__x
def getY(self):
return self.__y
ex1 = exam(10, 20)
print(ex1.getX(), ex1.getY())
print()
ex1.setX(20)
print(ex1.getX(), ex1.getY())
----결과----
10 20
20 20
이렇게 getX를 하면 은닉상태인 self.__x를 불러와줍니다.
원래라면 은닉상태여서 값 변경이 안되게 되어있는데, setX를 하면 값 변경을 시켜줍니다.
파이썬 데코레이터를 사용하여 표현해보겠습니다.
class exam:
def __init__(self, x, y):
self.__x = x
self.__y = y
@property
def x(self):
return self.__x
@property
def y(self):
return self.__y
@x.setter
def x(self, x):
self.__x = x
@y.setter
def y(self, y):
self.__y = y
ex1 = exam(10, 20)
print(ex1.x, ex1.y)
print()
ex1.x = 20
print(ex1.x, ex1.y)
----결과----
10 20
20 20
같으면서 약간 다릅니다.
하지만 같은 게터와 세터의 역할을 해주는건 변함없습니다.
게터와 세터가 사용될때 사용되었다는 말을 출력해보겠습니다.
class exam:
def __init__(self, x, y):
self.__x = x
self.__y = y
@property
def x(self):
print('x.getter 호출')
return self.__x
@property
def y(self):
print('y.getter 호출')
return self.__y
@x.setter
def x(self, x):
print('x.setter 호출')
self.__x = x
@y.setter
def y(self, y):
print('y.setter 호출')
self.__y = y
ex1 = exam(10, 20)
print(ex1.x, ex1.y)
print()
ex1.x = 20
ex1.y = 10
print(ex1.x, ex1.y)
----결과----
x.getter 호출
y.getter 호출
10 20
x.setter 호출
y.setter 호출
x.getter 호출
y.getter 호출
20 10
이런식으로 사용되는것을 볼 수 있습니다.
일반 클래스 함수로 사용되는것보다 보다편리하고 읽기 쉽게 작성할 수 있습니다.
여기까지 게터(getter)/세터(setter)에 대해 알아보아습니다.
728x90