728x90
1. 프로퍼티(property)
* 게터와 세터를 사용해 변수에 접근하려면 '객체명.게터' (ex) p1.get_age() ) 의 형식으로 접근해야하는데, 코드가 복잡해 보인다. 이런 상황에서 @property 나 property(게터, 세터) 를 사용하면 더 깔끔한 코드를 만들 수 있다.
# 게터와 세터 메소드를 이용한 예시
class Person:
def __init__(self, n, a):
self.set_name(n)
self.set_age(a)
def get_name(self):
return self.__name
def get_age(self):
return self.__age
def set_name(self, n):
self.__name = n
def set_age(self, a):
if a <= 0:
pass
else:
self.__age = a
def main():
p1 = Person('June', 22)
print(p1.__dict__) # {'_Person__name': 'June', '_Person__age': 22}
p1.set_age(32) # 클래스 변수 age 에 직접 접근하지 않고 메소드를 이용해 간접접근
print(p1.__dict__) # {'_Person__name': 'June', '_Person__age': 32}
print(p1.get_age()) # 32 // 게터를 이용해 클래스 변수 age 를 출력
main()
# property() 를 사용한 예시
class Person:
def __init__(self, n, a):
self.set_name(n)
self.set_age(a)
def get_name(self):
return self.__name
def get_age(self):
return self.__age
def set_name(self, n):
self.__name = n
def set_age(self, a):
if a <= 0:
pass
else:
self.__age = a
name = property(get_name, set_name)
age = property(get_age, set_age)
def main():
p1 = Person('June', 22)
print(p1.__dict__) # {'_Person__name': 'June', '_Person__age': 22}
p1.name = "set_june" # 프로퍼티 객체인 name 을 세터처럼 사용
print(p1.__dict__) # {'_Person__name': 'set_june', '_Person__age': 22}
print(p1.name) # set_june // 프로퍼티 객체인 name 을 게터처럼 사용
main()
# @property 를 사용한 예시
class Person:
def __init__(self, n, a):
self.__name = n
self.__age = a
@property # name 프로퍼티 객체를 생성하고, 이름에 해당하는 메소드를 게터로 지정
def name(self):
return self.__name
@property # age 프로퍼티 객체를 생성하고, 이름에 해당하는 메소드를 게터로 지정
def age(self):
return self.__age
@name.setter # 이어 등장하는 메소드를 name 프로퍼티 객체의 세터로 등록
def name(self, n):
self.__name = n
@age.setter # 이어 등장하는 메소드를 age 프로퍼티 객체의 세터로 등록
def age(self, a):
if a <= 0:
pass
else:
self.__age = a
def main():
p1 = Person('June', 22)
print(p1.__dict__) # {'_Person__name': 'June', '_Person__age': 22}
p1.name = "set_june" # 프로퍼티 객체인 name 을 세터처럼 사용
print(p1.__dict__) # {'_Person__name': 'set_june', '_Person__age': 22}
print(p1.name) # set_june // 프로퍼티 객체인 name 을 게터처럼 사용
main()
728x90
'# Programming Language > Python' 카테고리의 다른 글
[Python] 파이썬 정리(17)_클래스 메소드/static 메소드 (0) | 2021.07.31 |
---|---|
[Python] 파이썬 정리(16)_데코레이터 (0) | 2021.07.31 |
[Python] 파이썬 정리(14)_dict가 주는 메모리 부담 해결하는 __slots__ (0) | 2021.07.31 |
[Python] 파이썬 정리(13)_정보은닉/__dict__ (0) | 2021.07.31 |
[Python] 파이썬 정리(12)_스페셜 메소드/연산자 오버로딩 (0) | 2021.07.31 |