[Python 정리] 프로퍼티, setter, 프라이빗 속성이란?◎ Python/알게된 것 정리2022. 9. 24. 02:12
Table of Contents
반응형
프로퍼티 (Property)
클래스에서 프로퍼티는 값을 얻을 때 호출되는 메서드를 의미한다.
메서드 위에 @property를 넣으면 해당 인스턴스 메서드를 인스턴스 변수와 같이 다루게 되어 편리하다.
@로 시작하는 문자열을 이용해 메서드를 수식하는 기능은 데코레이터라고 한다.
class Person:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self._sex = sex # _를 줌으로써 프라이빗 속성
@property
def sex(self):
print(self._sex)
@sex.setter
def sex(self, sex):
if isinstance(sex, int):
print("문자열을 입력하세요.")
else:
self._sex = sex
Reo = Person("Reo", 23, "남")
Reo.sex
Reo.sex = 1004
Reo.sex = "남자"
Reo.sex
>>>
남
문자열을 입력하세요.
남자
@property를 이용해 ()을 추가적으로 적지 않고 변수처럼 사용할 수 있다.
@setter는 값을 설정할 때 호출하는 메서드다. 이를 이용해 변수처럼 값을 대입할 때 사용할 수 있다. 여기서는 성별을 숫자로 입력받으면 저장하지 않도록 설정했다.
프라이빗 속성
_를 붙이면 개발자가 해당 속성이 프라이빗 속성이라고 지정한다는 뜻이다.
__를 붙이면 이름 수식이 실행되어 아예 외부에서 호출할 수 없다! (물론 형식을 알면 호출할 수는 있다.)
이름 수식이란 아래 코드에서 __address라는 변수를 _Person__address라는 이름으로 변환하는 기능이다.
class Person:
def __init__(self, name, age, sex, address):
self.name = name
self.age = age
self._sex = sex # _를 줌으로써 프라이빗 속성
self.__address = address
@property
def sex(self):
print(self._sex)
@sex.setter
def sex(self, sex):
if isinstance(sex, int):
print("문자열을 입력하세요.")
else:
self._sex = sex
Reo = Person("Reo", 23, "남", "경기도")
Reo.__address
>>>
Traceback (most recent call last):
File "C:\Users\reo91\OneDrive\Coding Practice\P C++, Python\Python2.py", line 20, in <module>
Reo.__address
AttributeError: 'Person' object has no attribute '__address'
__address라는 속성이 없다고 한다. 이름 수식이 수행된 것이다.
print(Reo._Person__address)
>>>
경기도
위와 같이 변환하는 규칙을 알고 있다면 참조할 수 있긴 하다. 그러나 개발자가 일부러 프라이빗 속성으로 지정해둔 터라 직접 참조, 변경을 하지 않는 편이 좋다.
참고하면 좋을 강좌
https://reo91004.tistory.com/228
반응형
'◎ Python > 알게된 것 정리' 카테고리의 다른 글
[Python 정리] 내장함수 zip, filter에 대하여 (0) | 2022.09.26 |
---|---|
[Python 정리] if __name__ == "__main__": 의 의미, 활용법 (2) | 2022.09.24 |
[Python 정리] __init__과 __new__의 차이에 대하여 (0) | 2022.09.24 |
[Python 정리] 파이썬에서의 데이터 구조 (0) | 2022.09.22 |
[Python 정리] 파이썬 all/any 함수 (0) | 2022.09.21 |
@Reo :: 코드 아카이브
자기계발 블로그